防止git checkout覆盖文件

另一个开发人员检查他的.rvmrc到git回购。 我已经删除它,并将其添加到gitignore,但每次需要回头及时覆盖我的.rvmrc。 我在OSX上,所以我发现我可以使用OSX文件locking机制(“获取信息”中的“Locked”checkbox)来阻止我的开发机器发生这种情况,但是如何在Linux上完成?

我把它命名为root,chmod到444,但git(以普通用户身份运行)超出了所有权和许可的需要,并且仍然覆盖文件。

Solutions Collecting From Web of "防止git checkout覆盖文件"

具有讽刺意味的是,虽然git的默认行为是将未跟踪的文件视为宝贵的,但将文件添加到.gitignore告诉git它可以随时.gitignore文件。

.gitignore中的条目更常用于指示生成的文件,因此git会默默覆盖它们。 .git/info/exclude中的条目可能应该用于本地版本的配置文件。

请仔细阅读这个讨论 ,因为两者之间的区别似乎有些混淆。 我只是试了一下,当你回去的时候, .git/info/exclude中的条目.git/info/exclude被保护,产生“错误:未被跟踪的工作树文件'.rvmrc'将被合并覆盖。 根据Junio C Hamano的说法,两者之间的这种不同的行为可能不是故意的。 但是,如果您可以从.gitignore删除条目并将其移至.git/info/exclude ,则可能可以使其工作,并意识到后者在版本库之间没有版本化或共享,并需要与您的同事进行手动合作。

至于权限问题,请看这个:

 $ touch foo $ ls -l foo -rw-r--r-- 1 josh staff 0 Oct 1 09:55 foo $ sudo chown root:wheel foo $ ls -l foo -rw-r--r-- 1 root wheel 0 Oct 1 09:55 foo $ unlink foo $ ls -l foo ls: foo: No such file or directory 

在Unix中,创建或删除文件的功能仅基于包含它的目录的权限。 文件本身的权限只是修改文件(不幸的是在你的情况)。 rm工具检查文件的权限是礼貌的,但是unlink是低级的,并且盲目地调用系统调用。