只是好奇Git是否有类似Subversions Changelist功能的东西,我发现它在运行时非常方便,我知道我可以运行类似的东西:
cat 'changelistfileimade' | xargs git update
但很好奇是否也有内置方法?
我为此搜索了更多内容,我想我已经找到了我在上面的评论中提到的TortoiseSVNignore-on-commit
更改列表用例的替代品。有问题的命令是git update-index --assume-unchanged <path/name>
. Git 帮助对此有这样的说法:
--[no-]假设不变
指定这些标志时,不会更新为路径记录的对象名称。相反,这些选项设置和取消设置路径的“假设不变”位。当“假设未更改”位打开时,Git 停止检查工作树文件是否有可能的修改,因此您需要手动取消设置该位以告诉 Git 当您更改工作树文件时。这在处理具有非常慢的 lstat(2) 系统调用(例如 cifs)的文件系统上的大型项目时有时会很有帮助。
此选项也可以用作粗略的文件级机制,以忽略跟踪文件中未提交的更改(类似于 .gitignore 对未跟踪文件所做的事情)。如果 Git 需要修改索引中的这个文件,例如在提交合并时,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
ignore
您可以使用别名 for和unignore
以下行更进一步:
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
我自己从未使用过SVN 更改列表,但如果我理解正确,它允许您将文件分组到更改列表中,然后分别提交这些更改列表。(对?)
我不认为你真的需要 Git 的这样一个特性。您已经可以独立地单独暂存(git add
)每个文件或其中的部分(git add -p
)并提交这些文件。您可以为每个更改列表创建分支,然后合并/重新设置这些分支。或者您可以创建多个提交,然后使用交互式 rebase ( ) 重新排序它们git rebase -i
。
而不是svn diff --changelist something
,您将简单地使用git show changelistbranch
.
您不必推送那些本地/临时分支。在您认为它们已准备好被释放到野外之前,没有人需要看到它们。
您甚至可以命名您的“更改列表分支”:git branch changelist/name_of_your_changelist
,然后您将所有更改列表按其前缀分组。
我错过了什么吗?