SVN Changelist 的 Git 等效性



只是好奇 Git 是否有类似 Subversions Changelist 的功能,我觉得它在飞行中使用非常方便,我知道我可以运行类似的东西:

cat 'changelistfileimade' | xargs git update

但是我很好奇是否也有内置方法?

我为此搜索了更多内容,我想我已经找到了我在上面的评论中提到的 TortoiseSVN ignore-on-commit changelist 用例的替代品。有问题的命令是 git update-index --assume-unchanged <path/name> 。Git 帮助对此有这样的说法:

-

-[否]假设不变

指定这些标志时,不会更新为路径记录的对象名称。相反,这些选项设置和 取消设置路径的"假设不变"位。当"假设不变"位打开时,Git 停止检查工作 树文件以进行可能的修改,因此您需要手动取消设置位以在更改工作树时告诉 Git 文件。当在 lstat(2( 系统调用速度非常慢的文件系统上处理大型项目时,这有时很有帮助 (例如 CIFS(。

此选项还可以用作粗略的文件级机制,以忽略跟踪文件中未提交的更改(类似于 .gitignore 对未跟踪文件的作用(。Git 将失败(优雅地(,以防它需要在索引中修改此文件 例如,在提交中合并时;因此,如果假设未跟踪的文件在上游发生更改,您将需要处理 情况手动。

我在Nick Quaranto的GitReady博客上找到了该选项的解释,其中包括以下内容:

显然,有很多警告与此有关。如果直接git add文件,则会将其添加到索引中。合并带有此标志的提交将导致合并正常失败,因此您可以手动处理它。

但这对我来说只是成功的一半。下一步是知道你忽略了什么(并希望记住为什么(。这是Abe Voelker对一个恰当命名的问题的方便评论提供的。只需使用代码段编辑您的.gitconfig文件

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

如果文件中已存在 [alias] 位,请不要添加该位。现在git ignored会告诉你这样的事情:

h configs/environment/local.php
h configs/logging/log4php.xml

您可以使用以下行使用ignoreunignore别名更进一步:

    ignore = update-index --assume-unchanged
    unignore = update-index --no-assume-unchanged

我自己从未使用过SVN变更列表,但是如果我理解正确,它允许您将文件分组变更列表中,然后分别提交这些变更列表。(对吧?

我认为你真的不需要 Git 的这样一个功能。您已经可以单独暂存(git add(每个文件或其部分(git add -p(并提交它们。您可以为每个变更列表创建分支,然后合并/变基这些分支。或者,您可以创建多个提交,然后使用交互式变基(git rebase -i(对它们重新排序。

代替svn diff --changelist something,您只需使用 git show changelistbranch

您不必推送这些本地/临时分支。没有人需要看到它们,直到你认为它们准备好被释放到野外。

您甚至可以为"变更列表分支"命名:git branch changelist/name_of_your_changelist,然后您将按前缀对所有变更列表进行分组。

我错过了什么吗?

最新更新