TortoiseGit 是不是允许选择性分段,例如 git-gui?

Posted

技术标签:

【中文标题】TortoiseGit 是不是允许选择性分段,例如 git-gui?【英文标题】:Does TortoiseGit allow selective staging, like git-gui?TortoiseGit 是否允许选择性分段,例如 git-gui? 【发布时间】:2011-10-21 18:17:42 【问题描述】:

这个问题:

Can you interact with the index/staging area with TortoiseGit?

认为 TortoiseGit 的主要功能是不是,以消除对 git 命令行的需要,总的来说,我同意。

但是,git-gui 有一个我经常使用的功能(也许是为了弥补糟糕的工作流程):能够从当前补丁中选择性地暂存或取消暂存大块或行,以便将一堆散布的更改拆分为连贯的变更集在多次提交中。

命令行替代方案(无论如何对我来说)有点笨拙,所以理想情况下,我想在 TortoiseGit 中执行相同的选择性提交。

到目前为止,我还没有找到一种方法来做到这一点,而且我怀疑,从另一个问题的答案来看,这是不可能的。请问谁能确认一下?

【问题讨论】:

到目前为止,我见过的唯一一个完全支持在 GUI 中进行选择性暂存的 Windows 客户端是 SmartGit。因此,与 TortoiseGit 或 GitExtensions 相比,它也有弱点。 @Ivan Danilov:谢谢,SmartGit 对日常工作一见钟情。如果你想把它变成一个答案,它会竞争得很好...... 我已经回答了,并且在某种程度上扩展了我非常简洁的评论,因此它被视为真正的答案:) Git Gui 还支持选择性暂存和提交。 @ThomasS:是的。如果它不会在 Windows 上如此频繁地进入挂起状态,那么我会满足于使用它;就目前而言,我想要在 Windows 上更可靠地工作的东西。 (我怀疑这是某种 MSYS[2] 或 MinGW(库)故障,因为我不记得在 Linux 上发生过这种情况,但它在 Windows 上一直发生在我身上。有时也使用 gitk,所以这可能是 TCL/wish.exe 引起的错误,TCL 程序尝试读取输出的子进程越多,就越有可能发生这种情况。) 【参考方案1】:

从issue 222看来,“add -p”功能还没有实现。

能否添加对部分提交文件的支持? (git add -p)。 我知道 TortoiseGit 的工作方式与普通的“git index”有点不同,但我仍然希望以某种方式对此提供支持。

我希望只提交文件的一些更改。 例如,只提交文件的单行修复,其余的留在工作副本中。

【讨论】:

【参考方案2】:

到目前为止,我见过的唯一一个完全支持在 GUI 中进行选择性暂存的 Windows 客户端是 SmartGit。

因此,与 TortoiseGit 或 GitExtensions 相比,它也有弱点。

对我来说,SmartGit 的主要亮点是:

    无法比较两个修订版。你只能看到一个和它的父级之间的差异(TortoiseGit 可以)。 如果我对所有内容都不感兴趣(TortoiseGit 可以),则无法将日志限制到某个文件夹(好吧,这有点奇怪,我可能没有找到方法)。 与 VisualStudio 的集成(有点主观,但 GitEx 有它并且非常方便)

我记得还有别的东西,但现在评估 SmartGit 的最新版本我找不到它。要么是修复/添加了,要么我只是忘记了当时我不能做的事情。

无论如何,我在某些事情上同时使用 GitEx 和 TortoiseGit,而对于其他一切,控制台是最好的工具。

【讨论】:

感谢您的回答,尤其是向我介绍 SmartGit——我已经爱上了它。显然,您提到的限制是有效的,但由于它们不构成我工作流程的重要组成部分,很好。 (当然,其他人的里程可能会有所不同。) 仅作记录,我当前版本的 SmartGit (2.1.7:2012-01-23)确实允许您查看给定单个文件夹的日志 (内容)或单个给定文件,以及整个树。 从 2012 年 3 月起,TortoiseGit 和 Git 扩展都支持与帅哥一起工作。我认为 Duncan Smart 的答案应该被标记为这个问题的答案(不管 SmartGit 有多好)。 @Borek:是的,他们已经赶上了,很好的更新。 向Sourcetree 致敬,这是另一个支持以非常直观的格式进行选择性暂存的 Windows 客户端。我几乎在所有事情上都使用 TortoiseGit,当我想使用暂存功能时,我会启动 Sourcetree。【参考方案3】:

是的,现在可以:请参阅issue 222 - 它采用与 TortoiseSVN 相同的方法:

右键单击文件,选择“提交后恢复” TSVN 在工作副本之外创建文件副本,该文件在 > 提交对话框中以不同方式显示(可能是覆盖图标或不同颜色) 用户可以双击该文件以在 Tmerge 或其他一些差异工具中打开它并撤消所有不应提交的更改,然后保存这些更改 提交 提交完成后,原文件的副本被移回

(From TSVN Issue 68)

【讨论】:

邓肯,非常感谢你。我现在深深爱上了 SmartGit,但我要对所有 TSVN 团队说,不要气馁,继续努力;即使你有非常精彩的比赛,你仍然很棒。 很高兴看到 TortoiseGit 团队创建了一种良好的、面向 GUI 的方式,而不是大多数其他 git-gui 的草率 GUI-over-a-console-app 方式。现在,如果他们只对交互式 rebase 做同样的事情...... 不过,这不是选择性分期。这是一种解决方法。选择性暂存意味着您可以在进行时决定无需创建提交您想要什么和不想要什么。这没有。说 TortoiseGit 支持选择性暂存是不正确的。【参考方案4】:

SourceTree (https://www.sourcetreeapp.com/) 具有非常直观的 GUI,可用于选择性分段。它是与 BitBucket 集成的(毕竟是同一家公司的),但可以轻松地与任何 git 存储库一起使用。

我仍然并行使用 TortoiseGit,尤其是因为一些不错的功能,比如修订图。

【讨论】:

自从我提出这个问题以来的四年里,我已经取得了长足的进步,从 TortoiseGit 转到 Syntevo SmartGit,最后来到了 SourceTree,我发现它几乎适用于所有方面(包括不仅BB,还有 GitHub)。我在 SourceTree 中做不到的 0.5%,我在命令行上做。 sourcetree 很棒,但很遗憾他们不支持 linux【参考方案5】:

有从 2020 年开始实现此功能的拉取请求,希望尽快合并。

https://github.com/TortoiseGit/TortoiseGit/pull/233

【讨论】:

另外,gitlab.com/tortoisegit/tortoisegit/-/issues/2299 的讨论是开放的,但最终指向同一个 PR。 好像合并了。等待新版本... 是的,我也在等待新版本。 也许你可以在这里试一试:download.tortoisegit.org/tgit/previews,但我不确定 2021-07-25 的最新预览版是否包含此类合并提交。

以上是关于TortoiseGit 是不是允许选择性分段,例如 git-gui?的主要内容,如果未能解决你的问题,请参考以下文章

导航栏内和导航标题下方的 SwiftUI 分段选择器

滚动视图内的分段控制

TortoiseGit添加文件还没有提交为啥显示对号不是加号?

TortoiseGit创建本地库并提交到远程服务器

Git和TortoiseGit

TortoiseGit 冲突黄色图标不显示,选择冲突的文件右键“abort merge”显示如图,怎么解决?