2011-10-29 36 views
3

我以爲我已經想通了,但最近嘗試失敗。Git忽略不工作,我不明白

我需要提交一個文件,然後提交後忽略任何後續的repo提交。

可以說文件是example.txt。

我提交了對example.txt的更改並將它們推送到github。然後我並添加example.txt並保存。
我然後使用git rm --cached example.txt
然後git add .gitignore提交 - >推

在該步驟中的問題是一個git狀態被示出作爲example.txt的刪除因而提交/推從遠程回購刪除它。

我已經嘗試了幾個變體,創建了.gitignorerm --cached,它刪除了文件或不忽略它並提交不需要的更改。

尋找洞察確切的過程忽略已提交的文件而不刪除它們。

+0

你真的想做什麼?爲什麼你想在源代碼管理中不是本地的文件? –

+0

這是一個服務器配置文件(數據庫),實際上直接從github服務,但本地主機數據庫和遠程數據庫有diff參數,沒有辦法改變這是如何工作的,除非我定義了兩個數據庫,我認爲它會告訴git在第一次提交之後忽略它,並保持遠程版本不變。 – Wyck

回答

7

你知道git rm --cached example.txt將從索引中移除文件並將其保存在工作目錄中。然後,當您提交時,除了您添加的.gitignore文件外,您還在提交文件的刪除。因此,當您推送文件時,它將從回購庫中刪除。

此外,您不能忽略使用gitignore.跟蹤文件的更改,而是可以嘗試執行git update-index --assume-unchanged example.txt以「忽略」該文件。

+0

謝謝,我認爲你先回答。 – Wyck

+0

這絕對有訣竅,但我沒有找到任何解釋爲什麼.gitignore文件在某些​​情況下無法使用的任何內容。對於intellij android項目,我無法排除.idea中的xml文件。忽略模式與它們應該是一樣的,適用於相同路徑級別的其他目錄。爲什麼?誰知道 – speedynomads

2

一種可能的方法是告訴Git假定文件不變。

$ mkdir project 
$ cd project 
$ touch example.txt 
$ git init 
$ git add . 
$ git commit -m "checkin..." 
$ git update-index --assume-unchanged example.txt 
$ echo "hello" >> example.txt 
$ git status 
# On branch master 
nothing to commit (working directory clean) 
$ 

信任這就是你想要的。應該預先警告,這種方法有它的瑕疵 - 尤其是如果你試圖切換到example.txt版本與master版本不同的分支。