簡體   English   中英

防止git checkout覆蓋文件

[英]prevent git checkout from overwriting a file

另一個開發人員將他的.rvmrc檢查到了git repo。 我已經將它刪除並添加到gitignore,但每次需要回溯它都會覆蓋我的.rvmrc。 我在OSX上,所以我發現我可以使用OSX文件鎖定機制(Get Info中的“Locked”復選框)來阻止我在開發機器上發生這種情況,但是如何在Linux上完成呢?

我知道它要root並chmod到444,但git(以我的普通用戶身份運行),不知何故超越了所有權和權限的需要,仍然覆蓋了文件。

具有諷刺意味的是,雖然git的默認行為是將未跟蹤文件視為珍貴文件,但將文件添加到.gitignore告訴git它可以隨時.gitignore文件。

.gitignore中的條目更常用於表示生成的文件,因此git將以靜默方式覆蓋它們。 .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是較低級別並盲目地調用系統調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM