只是好奇Git是否有Subversions Changelist这样的特性,我发现它在运行时非常方便,我知道我可以运行以下内容:
cat 'changelistfileimade' | xargs git update但是我很好奇是否也有一个内置的方法?
发布于 2012-05-16 02:51:24
我自己从未使用过SVN changelists,但如果我理解正确的话,它允许您将文件分组到更改列表中,然后分别提交这些更改列表。(对吧?)
我不认为Git真的需要这样的功能。您已经可以单独暂存(git add)每个文件或其部分(git add -p),然后提交这些文件。您可以为每个更改列表创建分支,并在以后合并/更改这些分支的基址。或者,您可以创建多个提交,然后使用交互式rebase (git rebase -i)对它们进行重新排序。
您只需使用git show changelistbranch,而不是svn diff --changelist something。
您不必推送这些本地/临时分支。没有人需要看到它们,直到你认为它们已经准备好被释放到野外。
你甚至可以命名你的“变更列表分支”:git branch changelist/name_of_your_changelist,然后你将所有的变更列表按照它们的前缀进行分组。
我是不是遗漏了什么?
发布于 2014-06-25 05:00:28
我在谷歌上搜索了一下,我想我已经找到了我在上面的评论中提到的TortoiseSVN ignore-on-commit changelist用例的替代品。正在讨论的命令是git update-index --assume-unchanged <path/name>。Git help有这样的说法:
--无假设-未更改
指定这些标志时,不会更新为路径记录的对象名称。相反,这些选项为路径设置和取消设置“假定未更改”位。当“假定未改变”位开启时,Git会停止检查工作树文件中可能的修改,所以当你改变工作树文件时,你需要手动取消设置该位来告诉Git。当在具有非常慢的lstat(2)系统调用(例如cifs)的文件系统上处理大项目时,这有时很有帮助。
此选项还可以用作粗略的文件级机制,以忽略跟踪文件中未提交的更改(类似于.gitignore对未跟踪文件所做的操作)。如果Git需要修改索引中的这个文件,那么它将失败(优雅地);例如,当合并到提交时;因此,如果假定的未跟踪文件在上游发生更改,您将需要手动处理这种情况。
我在Nick Quaranto's GitReady blog上找到了该选项的解释,其中包括以下内容:
显然,在这一点上有相当多的警告。如果您直接
git add文件,它将被添加到索引中。在此标志打开的情况下合并提交将导致合并正常失败,因此您可以手动处理它。
但对我来说,这只是战斗的一半。下一步是知道你忽略了什么(希望记住为什么)。这是由this handy comment由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和unignore的别名:
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchangedhttps://stackoverflow.com/questions/10606809
复制相似问题