我有一个提交的文件“ build.properties”,该文件必须位于我们的项目存储库中,因为它包含重要的构建信息。
有时候,某些开发人员执行一些本地测试,更改此文件的内容,然后他们错误地提交更改(通过简单地暂存他们所做的所有更改,包括build.properties)。 / p>
现在,我想以某种方式忽略对该文件所做的所有本地更改,以免这种情况会继续破坏构建,例如,当开发人员将运行* git add **或 git commit -a ,该文件将不会包含在暂存文件中。
我已经进行了一些研究,但是直到现在,考虑到该操作需要远程应用,例如,我可以使用 .git / info / exclude 文件夹,但是每次新开发人员克隆存储库时,他都必须再次设置 .git / info / exclude ,我想避免这种情况。
此外,.gitignore仅适用于未跟踪的文件,如果我将跟踪文件添加到.gitignore,则将不会被忽略。我发现有人建议将.gitignore与git rm --cached结合使用,然后重新添加文件,但是一旦将文件重新添加到树中,就一直跟踪更改,还从官方GIT文档中读取信息, .gitignore看起来不适合我的需求。
有什么解决方案吗?谢谢!
更新
我是SVN的忠实拥护者,对GIT的了解更多,对SubVersion的了解也更多。
所以我想,我的问题的答案是GIT并没有提供实现这种目标的任何方法...
同意这不是最好的做法,并且还有其他方法可以实现我所要求的内容,而无需使用著名的源代码控制工具GIT对其进行管理,但是我的意图仍然很普遍,我们可以在其中解决许多不同的背景。
我的意思是GIT提供了解决大多数标准实践和原则的方法,例如,我无法更改原则的远程历史记录,但是GIT给了我实现这一目标的力量,所以我想知道为什么也不提供解决我问题的简便方法。
答案 0 :(得分:1)
我了解您的尝试及其背后的原因是有根据的。但事实是,它与Git的分布式和并行性质相矛盾。 Git被设计为:
版本控制系统,用于跟踪计算机文件中的更改并在多人之间协调这些文件上的工作
如果Git正在处理您的文件,则认为该文件可能已更改并且需要跟踪(否则,请打扰版本控制系统)。正如您所指出的,可以在本地执行此操作,因为这是一个单独的决定,告诉Git您不想在自己的计算机上提交对该文件的更改。尝试在全球范围内进行操作基本上就像是尝试将Git用作简单的文件存储系统。
因此,请记住,Git并非旨在满足您的要求,您可能需要考虑以下几种选择:
git update-index --skip-worktree <file>
(您可以阅读有关为什么使用而不是其他选项here的更多信息); 答案 1 :(得分:0)
更好的方法是针对不同的环境使用多个build.properties
。
示例:buildDev.properties
用于开发环境,类似地buildTest.properties
和buildProd.properties
用于测试和产品环境。
注意::git rm --cached
用于在您推送文件以删除不该拥有的文件并且现在还希望取消跟踪该文件时使用。在这种情况下,您可以在.gitignore
中添加文件名,然后使用git rm --cached
从暂存区中删除它,然后提交。现在,此提交将删除可以推送到主服务器的文件,而无需在本地删除文件。