我对一个我不想提交到我的存储库的文件进行了本地更改.它是用于在服务器上构建应用程序的配置文件,但我想在本地使用不同的设置进行构建.当然,当我将'git status'作为要上演的东西时,该文件总是显示出来.我想隐藏这个特定的更改而不是提交它.我不会对文件进行任何其他更改.
经过一番挖掘后,我看到了两个选项:'假设未改变'和'跳过工作树'.这里的前一个问题谈到了它们,但并没有真正解释它们之间的区别.我的问题是:这两个命令有何不同?为什么有人会使用其中一个?
我可以告诉git忽略被修改(删除)但不应该被提交的文件吗?
情况是我在repo中有一个子目录,其中包含我根本不感兴趣的东西,因此我将其删除以防止它出现在自动完成等中(在IDE中).
但是现在,如果我将该文件夹添加到.gitignore,只是没有任何变化,所有的东西都显示为被git status删除.
有没有办法让git忽略它?
(或者,因为我正在使用git-svn,我可以将更改提交给本地git并确保它们不会传递给svn repo吗?)
我已经多次阅读过这方面的文档了,我仍然没有完全理解这些不同命令之间的差异.也许这只是我,但文档可能更清晰:
http://git-scm.com/docs/gitignore
https://help.github.com/articles/ignoring-files
此外,很多关于这个主题的评论似乎使用了"索引","承诺","跟踪"等词语,有些松散,这使得这三者之间的差异不那么明显.
我当前(公认有限)的理解:
匹配的文件.gitignore
将来不会被跟踪.(虽然它们之前可能已被跟踪过.)这意味着它们将不会在未来的git status
列表中显示为已更改.
但是,未来的更改仍将与远程回购同步.换句话说,文件仍然是"索引"的,但它们没有被"跟踪".由于.gitignore
文件位于项目目录中,因此可以对文件本身进行版本控制.
匹配的文件.git/info/exclude
也不会被"跟踪".此外,这些文件永远不会被远程同步,因此永远不会被任何其他用户以任何形式看到.这些文件应该是特定于单个用户的编辑器或工作流的文件.因为它在.git
目录中,所以exclude
文件本身不能进行版本控制.
已在其上assume-unchanged
运行的文件也不会显示在git status
或中git diff
.这看起来很相似exclude
,因为这些文件既没有"索引"也没有"跟踪".但是,之前要提交的文件的最后一个版本assume-unchanged
对于repo中的所有用户仍然可见.
以上解释是否正确?请指正.
如果文件已经在提交中,那么在匹配.exclude
和运行文件
之间的功能有何不同assume-unchanged
?为什么一个人更喜欢另一种方法?
我的基本用例是我想避免在编译文件中对差异进行排序,但我仍然希望这些编译文件与源文件一起同步.将一个gitignore
"d文件仍然推?如果没有,如何管理编译文件的最终部署?
在此先感谢您的帮助.