另一个开发人员将他的.rvmrc检查到了git repo。我已经将它删除并添加到gitignore,但每次需要回溯它都会覆盖我的.rvmrc。我在OSX上,所以我发现我可以使用OSX文件锁定机制(Get Info中的“Locked”复选框)来阻止我在开发机器上发生这种情况,但是如何在Linux上完成呢?
我知道它要root并chmod到444,但git(以我的普通用户身份运行),不知何故超越了对所有权的需求。权限并仍然覆盖文件。
答案 0 :(得分:4)
具有讽刺意味的是,虽然git的默认行为是将未跟踪文件视为宝贵文件,但将文件添加到.gitignore
会告诉git它可以随时删除文件。
.gitignore
中的条目更常用于表示生成的文件,因此git将以静默方式覆盖它们。 .git/info/exclude
中的条目可能应该用于配置文件的本地版本。
请完整阅读this discussion,因为两者之间的差异似乎有些混乱。我刚试了这个,.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
是较低级别的,并且盲目地调用系统调用。