为了账号安全,请及时绑定邮箱和手机立即绑定

git忽略vs.排除vs.假设不变

git忽略vs.排除vs.假设不变

Git
侃侃尔雅 2019-11-14 10:48:10
我已经多次阅读了有关此文档的文档,但仍然没有完全理解这些不同命令之间的区别。也许只有我一个人,但是文档可能更加清晰:http://git-scm.com/docs/gitignorehttps://help.github.com/articles/ignoring-files此外,许多关于该主题的评论似乎在某种程度上松散地使用了“索引”,“提交”,“跟踪”这两个词,这使得这三个之间的区别不太清楚。我目前的(公认的有限)理解:以后.gitignore将不再跟踪匹配的文件。(尽管它们可能以前已被跟踪。)这意味着它们永远不会在git status更改后出现在将来的列表中。 但是,将来的更改仍将与远程存储库同步。换句话说,文件仍然是“索引”的,但它们不是“跟踪”的。由于.gitignore文件位于项目目录中,因此可以对文件本身进行版本控制。匹配的文件.git/info/exclude也不会被“跟踪”。此外,这些文件将永远不会被远程同步,因此任何其他用户都不会以任何形式看到它们。这些文件应该是特定于单个用户的编辑器或工作流程的文件。由于它位于.git 目录中,因此exclude文件本身无法版本控制。assume-unchanged在其上运行过的文件也不会显示在git status或中git diff。这似乎与相似exclude,因为这些文件既没有“建立索引”也没有“跟踪”。但是,之前要提交的文件的最新版本将对存储库assume-unchanged中的所有用户可见。我的问题:以上解释正确吗?请纠正我。如果文件已经在提交,什么是它匹配之间的功能不同的.exclude运行 assume-unchanged就可以了?为什么一个人会偏爱一种方法?我的基本用例是,我想避免对已编译文件的差异进行排序,但是我仍然希望那些已编译文件与源文件同步。将一个gitignore“d文件仍然推?如果没有,如何管理已编译文件的最终部署?在此先感谢您的帮助。
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

我将接受Junio Hamano(Git的维护者)通过电子邮件发送的答复,因为我认为它比正式文档更清楚地解释了某些事情,并且可以被视为“官方”建议:


.gitignore和.git / info / exclude是调用相同机制的两个UI。树内.gitignore将在项目成员之间共享(即,每个在项目上工作的人都应将与其中的忽略模式匹配的路径视为无效的)。另一方面,.git / info / exclude用于个人忽略模式(即,您在从事项目工作时,将其视为杂项)。


假设不变的机制不应被滥用。这是“我知道我的文件系统操作很慢。我向Git保证,我不会通过使用该位来更改这些路径的方式-那样,Git不必每次检查是否在其中更改了内容我要求输出“ git status”。除此之外,它没有其他含义。特别是,Git 不能保证Git始终会认为这些路径是未修改的--如果Git可以确定标记为假定不变的路径已更改,而又不会产生额外的lstat(2)成本,则它保留以下权利:报告该路径 已被修改(因此,“ git commit -a”可以自由提交该更改)。


查看完整回答
反对 回复 2019-11-14
?
动漫人物

TA贡献1815条经验 获得超10个赞

希望不会有太多的信息源被松散地使用,索引和提交,因为它们都是不同的且有意义的。


已建立索引意味着该文件位于git索引中。在过去的某个时候,有人git add在文件上使用过或具有等效命令。该文件已被跟踪,也可能已提交。

已跟踪表示git正在监视文件中的更改。跟踪任何已提交的文件或索引中的任何文件。

提交意味着该文件在git的历史记录中。该文件至少有一个检查点。您可以还原到该文件的任何提交版本。

现在就我所知。我不确定这个定义,但这是我的理解;很高兴对此进行纠正:


提交索引文件后,该文件将不再在索引中。下次修改(或删除)时,它又回到索引中。 索引是与提交的所有跟踪文件的总和。


索引也称为缓存或暂存区。


关于您的主要问题。.git / info / exclude与.gitignore相同,只是优先级较低,不在存储库中(因此,未提交和共享)。都不会影响已经跟踪的文件。两者都会影响当前未跟踪的文件。在.gitignore之后git add或git commit为时已晚;git已经跟踪了文件,.gitignore不会对此产生影响。


假定未更改仅影响跟踪的文件,因此与.gitignore完全分开。它可以暂时假装该文件未跟踪并被忽略(但它不一定必须也不能与正常行为有所不同)。就像其他答案提到的那样,这并不是用来忽略对文件的更改,只是为了潜在地避免在慢速文件系统上进行文件系统操作。


回复:第3点:您不应将编译文件添加到git中。将文件编译到源所在的其他目录,然后忽略整个目录。将编译后的文件捆绑到一个库中,并将其添加到工件存储库中,但不要将其放入git中。


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 1282 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信