![](/img/trans.png)
[英]Equivalence of Perforce “p4 sync -p …@Changelist” in Git
[英]Git equivalence of SVN Changelist?
只是想知道Git是否具有Subversions Changelist功能之类的功能,我发现它可以随时随地使用,我知道我可以运行以下功能:
cat 'changelistfileimade' | xargs git update
但很好奇是否也有内置方法吗?
我为此搜索了更多内容,我想我已经找到了我在上面的评论中提到的TortoiseSVN ignore-on-commit
更改列表用例的替代品。 有问题的命令是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
您可以通过以下几行使用ignore
和unignore
ignore
别名来更进一步:
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
我自己从未使用过SVN变更列表 ,但是如果我理解正确,它可以让您将文件分组到变更列表中 ,然后分别提交这些变更列表。 (对?)
我认为您在Git中确实不需要这样的功能。 您已经可以分别git add
( git add
)每个文件或文件的一部分( git add -p
)并提交它们。 您可以为每个变更列表创建分支,然后合并/重新设置这些分支。 或者,您可以创建多个提交,然后使用交互式rebase( git rebase -i
)对它们进行重新排序。
不用svn diff --changelist something
,您只需使用git show changelistbranch
。
您不必推那些本地/临时分支。 除非您考虑将它们准备发布到野外,否则没人需要看到它们。
您甚至可以为“更改列表分支”命名空间: git branch changelist/name_of_your_changelist
,然后将所有更改列表按其前缀分组。
我想念什么吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.