我如何告诉 git(或其他 dvcs)去私下跟踪一个文件?
我如何告诉 git(或其他 dvcs)去私下跟踪一个文件?
我的用例与这个非常相似;一个团队使用一个中央代码库(在我的情况下是subversion,但我相信如果是git,问题也是一样的),其中一些文件是成员私有的(Django本地设置文件,IDE私有项目首选项等)。虽然私有文件应保持私有,也就是说,我不希望我对其进行的更改被推送或提交,但我确实希望对该文件进行跟踪和版本控制。
最好的选择是默认情况下将文件保持私有;一个变通办法是保持私有提交-记住单独提交私有文件可能会很麻烦,但仍然比完全无法跟踪要好。
与建议的解决方案相比:
此方法和此方法并不好,因为它们完全阻止了文件的提交;这不是我想要的。我希望在本地进行提交;只是不想将其公开。
顺便说一下-虽然我喜欢分布式版本控制系统,并且git一直是一种默认选择,但我对它并不特别执着(无意中的双关语);如果只有hg或bzr可以实现这一点,这可能足以让我转换。
如何告诉Git(或其他版本控制系统)私下跟踪一个文件?
问题的出现原因是:Git是一个分布式版本控制系统,它跟踪整个项目的变化。但有时我们希望某些文件可以私下跟踪,而不被外部版本控制所知晓。这可能是因为这些文件包含私人配置,或者与特定用户相关。
解决方法是:在项目根目录下创建一个被忽略的子文件夹,用于存放私有文件。我们可以在.gitignore文件中添加对该文件夹的忽略规则,确保它不被外部版本控制系统所追踪。然后,在该文件夹下初始化一个独立的Git仓库,用于跟踪私有文件的变化。如果其他软件需要在主仓库的特定位置找到其配置文件,可以创建一个符号链接,链接到私有文件夹中的某个文件。这个符号链接可以选择是否被跟踪,因为它的历史记录与主项目无关,并且应该在很长一段时间内保持稳定。
需要注意的是,私有文件夹不一定非要放在项目根目录下,但它必须相对于项目根目录的某个位置,以便进行符号链接。在Git中,完全可以在一个仓库的子目录下初始化另一个仓库,只要外部仓库忽略了内部仓库即可。实际上,我个人在我的主目录下和主目录下的项目中都使用了这种方法。
尽管你可能希望用户配置文件与主仓库的特定提交相关联,但这在Git中是不可能的。Git关注整个仓库的状态(也就是它所跟踪的所有内容),它无法提交部分更改。这是因为,即使只删除一个文件,提交的SHA-1哈希标识也会完全不同。
通过上述方法,我们可以在Git中实现私下跟踪文件的需求,同时保持项目的完整性和稳定性。这对于包含私人配置或与特定用户相关的文件非常有用。
有时候我们希望在使用Git(或其他版本控制系统)时,能够跟踪某个文件但不希望将其提交到公共的代码库中。下面介绍了一个解决这个问题的方法:
首先,我们可以创建一个模板文件,比如`settings.txt.template`,将其添加到代码库中并提交。然后,我们在本地设置个人文件(`settings.txt`),并将其添加到`.gitignore`文件中,这样Git就会自动忽略这个文件的提交。
另外,还可以考虑使用Git的子模块功能。具体操作可以参考Git官方文档中的Git子模块部分。
通过以上方法,我们可以实现在Git中跟踪文件但不将其提交到公共代码库的需求。