簡體   English   中英

使用 gitignore 忽略(但不刪除)文件

[英]using gitignore to ignore (but not delete) files

我的 git 存儲庫中有一個 tmp 目錄,我希望仍然存在,但請忽略。 我將它添加到.gitignore ,但git status仍然告訴我該目錄中文件的更改。 我試過git rm -r --cached ,但這會將其從遠程倉庫中刪除。 如何停止跟蹤對此目錄的更改,但仍允許它存在? 我還需要對 1 個文件執行此操作,但是在.gitignore對它們進行更改之后,對它們的更改也會顯示在git status中。 我應該怎么辦?

您可以通過運行以下命令來更新本地 git 存儲庫,而不是.gitignore

git update-index --assume-unchanged <file>

在這種情況下,原始存儲庫中正在跟蹤文件。 您可以在本地存儲庫中對其進行修改,git 永遠不會將其標記為已更改。 閱讀更多:

在允許文件存在的同時忽略對文件所做的更改是.gitignore的確切目的。 因此,將文件(或目錄)添加到.gitignore是您唯一需要做的事情。

但是您的問題是 git 已經在跟蹤您要忽略的文件,並且.gitignore不適用於跟蹤的文件。 停止此跟蹤的唯一方法是告訴 git 刪除它們。 通過使用git rm --cached ,您可以防止 git 刪除您的本地文件,但任何其他獲得您更改的存儲庫都將應用刪除。 我認為沒有辦法從您自己的存儲庫中避免這種情況。 您必須在其他存儲庫上執行某些操作,否則接受文件將被刪除。

為了防止在其他存儲庫上被刪除,您可以:

  • (顯然)在某處備份文件,拉取更改並恢復文件,
  • 或者git rm --cached文件並在拉取更改之前提交。 Git 將很好地合並這兩個刪除,而不會觸及已經未跟蹤的文件。

在你的.gitignore文件中的目錄名末尾加上/ ,即

tmp/

如果在該目錄中有跟蹤文件,您需要告訴 git 先忘記它們(在將目錄添加到忽略列表之前)。 假設您在那里沒有任何重要的東西(即您可以刮擦它):

git rm -rf ./tmp/
git commit -m "untrack tmp dir"
mkdir tmp
echo tmp/ >> .gitignore
git add .gitignore ; git commit -m "add tmp/ to ignore list"

該目錄中的新文件將不會被跟蹤。

git rm--cached選項僅適用於索引(或多或少有待更改)。 它對工作樹或已跟蹤內容的狀態沒有影響。

.gitignore 對跟蹤的文件沒有影響。

您想要的是在 tmp/ 目錄中的文件上設置假設不變位。 這里有一個很好的解釋: Git: untrack a file in local repo only and keep it in the remote repo

此外,用於在目錄中的所有文件上設置假設不變的單行 - git update-index --assume-unchanged on directory

聽起來您正在嘗試跟蹤文件(例如index.php ),將其添加到遠程存儲庫,然后停止觀看跟蹤它,同時將文件保留在遠程(即在更改時保持index.php在遠程存儲庫上保持不變)它在本地)。

據我了解,git 無法做到這一點。 您可以跟蹤文件,也可以不跟蹤。 如果您跟蹤一個文件,它存在於遠程倉庫中,並在您提交更改時更改。 如果您不跟蹤文件,則遠程存儲庫中不存在該文件。

由於 git 無法完全按照您的要求進行操作,因此可能還有其他解決方案,具體取決於您的具體情況。 例如,當您在本地更改index.php時,為什么不希望遠程更改它? 文件中是否有用戶特定的設置? 如果是這種情況,您可以這樣做:

cp index.php index_template.php
git rm --cached index.php

現在將 index_template.php 編輯為您希望它出現在遠程倉庫中的樣子。 在您的 README 中添加一些內容,告訴使用您的存儲庫的人,一旦他們克隆它,他們必須將 index_template.php 復制到 index.php 並對其進行編輯以滿足他們的需要。

git add index_template.php
git add README
git commit -m 'added template index.php file'
git push

當有人克隆你的倉庫時,他們必須創建自己的index.php 您已經為他們簡化了:只需將index_template.php復制到index.php並使用特定於計算機的設置進行修改。

暫無
暫無

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

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