Chr*_*ola 3 svn git git-svn gitignore
我目前正在使用Subversion存储库,但是我正在使用git在我的计算机上本地工作。它使工作变得容易得多,但同时也使Subversion存储库中发生的某些不良行为变得非常明显,这给我带来了问题。
下拉代码后,本地构建过程有些复杂,它会创建(不幸的是修改)许多文件。显然,这些更改并不意味着会被提交回存储库。不幸的是,构建过程实际上是在修改一些跟踪的文件(是的,很可能是因为有人在某个时候将这些构建工件错误地提交给了Subversion存储库)。由于这些都是修改,因此将它们添加到我的忽略文件中对我没有任何帮助。
我可以避免将这些更改退回去,我只是简单地不暂存或提交它们,但是拥有未暂存的本地更改意味着我必须先清理它们才能重新建立基础。
我想知道的是,是否有任何方法可以忽略将来对一组跟踪文件的更改?另外,还有其他方法可以解决我遇到的问题,还是只需要告诉谁签入这些文件来清理它们即可?
正如Nathan所说,清理(取消跟踪)这些文件是明智之举。
但是,如果您必须忽略跟踪的文件(在忽略文件时不是本机的Git方法:Git仅忽略非跟踪的文件),则可以设置一个过程来复制要忽略的文件的内容,并在提交时还原。
我最初认为,涂抹/清洁过程(即gitattributes筛选器驱动程序)可以解决问题:
,其中:
但是,如本文所述,这意味着通过添加有状态上下文(即,被污染/清除的文件的完整路径名)来滥用此无状态文件内容转换。
JC Hamano明确禁止这样做:
尽管我最初考虑
%P
使用路径名插入“ ”,但最终还是决定使用它,以阻止人们滥用过滤器进行有状态转换,该转换会根据时间,路径名,提交,分支和内容而改变结果。
甚至Linus Torvalds当时对所有机制都有些保留:
我不得不说,我显然不是玩游戏的忠实粉丝,但是差异非常明显。
它们实际上有用吗?我不知道。我对此功能的任何实际用户都感到有些紧张,但是我不得不承认,它被干净的实现所吸引。
我怀疑这会让我们有些不满,但我也怀疑人们实际上最终会像这样扭曲自己,然后指责我们,并在我们支持这一点时给我们造成巨大的痛苦,而人们希望“扩展语义”不再是干净的。
但是我不确定一个论点的有效性。我确实相信“给他们绳子”的哲学。我认为您可能可以为此而自欺欺人,但嘿,任何这样做的人都应该责怪自己
因此,添加某种保存/恢复机制(并有效地忽略对Git中一组跟踪文件的任何更改)的正确位置就在钩子上:
post-checkout
:在更新工作树后运行git checkout时调用。在那里,您可以运行一个脚本来收集所有要忽略的文件并将它们保存在某个地方。
pre-commit
:您可以运行第二个脚本,该脚本将在获取建议的提交日志消息并进行提交之前恢复这些文件的内容。
归档时间: |
|
查看次数: |
518 次 |
最近记录: |