繁体   English   中英

SVN Changelist的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

您可以通过以下几行使用ignoreunignore ignore别名来更进一步:

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

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

我认为您在Git中确实不需要这样的功能。 您已经可以分别git addgit 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM