2013-03-10 42 views
1

我在git上遇到問題。最近我犯了一個錯誤,並通過使用git add -f path/to/folder將一個目錄添加到我的repo中。現在我努力忽略這個文件夾,但沒有任何效果。到目前爲止,我所做的:遇到「untracking」文件的問題(忽略對跟蹤文件的進一步更改)

git update-index --assume-unchanged path/to/folder 

上面的命令做了工作,但一旦我用chmod -R 777給這個文件夾的權限的變化git的狀態再次出現:

# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: app/tmp/cache/models/myapp_cake_model_default_contractsign_attachments 
# modified: app/tmp/cache/models/myapp_cake_model_default_contractsign_list 
# modified: app/tmp/cache/models/myapp_cake_model_default_contractsign_signatures 
# modified: app/tmp/cache/models/myapp_cake_model_default_contractsign_users 
# modified: app/tmp/cache/persistent/myapp_cake_core_cake_dev_eng 
# modified: app/tmp/cache/persistent/myapp_cake_core_cake_dev_fre 
# modified: app/tmp/cache/persistent/myapp_cake_core_cake_dev_spa 
# modified: app/tmp/cache/persistent/myapp_cake_core_cake_eng 
# modified: app/tmp/cache/persistent/myapp_cake_core_cake_fre 
# modified: app/tmp/cache/persistent/myapp_cake_core_cake_spa 
# modified: app/tmp/cache/persistent/myapp_cake_core_default_eng 
# modified: app/tmp/cache/persistent/myapp_cake_core_default_fre 
# modified: app/tmp/cache/persistent/myapp_cake_core_default_spa 
# modified: app/tmp/cache/persistent/myapp_cake_core_file_map 
# modified: app/tmp/cache/persistent/myapp_cake_core_method_cache 
# modified: app/tmp/logs/error.log 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

編輯:也許我之前有點不清楚。所以基本上對於我的項目,我希望它們的tmp/文件夾中的當前內容被添加,但變更不再被git跟蹤。所以我這樣做:

$ git update-index --assume-unchanged app/tmp/ 
Ignoring path app/tmp/ 

但現在,爲了再次讓我的應用程序的工作,我需要給寫權限的文件夾中的文件,所以我所做的:

sudo chmod -R 777 app/tmp/ 

但是,一旦我做了那我得到了你可以在以上看到的日誌變化沒有進行提交:。我不希望跟蹤這些變化,只是忽略。

只是爲了信息,這裏是我在我的gitignore:

/app/tmp/* 
+0

反而說文件出現等等等等,顯示你的git狀態的輸出 – manojlds 2013-03-10 09:17:03

+0

也請包括你的'.gitignore'文件的內容,以及你用來'git rm'文件的確切命令,以及該命令的輸出,如果有的話 – 2013-03-10 09:53:44

回答

2

您似乎混合不同的東西放在一起,因爲你不知道他們在做什麼。

將文件標記爲「假設未發生變化」會忽略到一個跟蹤文件的進一步變化 - 這是不是你說你想要的。 (注:這個問題最初說的OP要untrack文件)

使用git rm --cached只從索引中移除文件(臨時區域),但並沒有告訴Git的任何事情從現在開始忽略它,所以你在正確的軌道上,但你並沒有走完全程。在刪除文件(它現在再次未被跟蹤,但Git總是告訴你關於未跟蹤的內容)之後,必須另外爲它添加一個條目到Git中的一個忽略文件中;然後,那麼它不會再在狀態消息中顯示它。

要做到這一點,這個附加項文件.gitignore在回購的根(創建一個文件,如果不存在的話):

/full/path/to/my_file_name 

當然,請不要使用,從字面上但使用而是實際的路徑。請注意,在這種情況下,首斜槓並不意味着「文件系統根」,而是「回購的根」。


編輯:您提供更多信息後,你的問題是更清晰。其實你不希望untrack一些文件(即從版本控制中刪除),但只有無視進一步變更。

爲此,「假設 - 不變」的確是正確的做法,但假定 - 不變不會在目錄上遞歸地工作。這意味着您必須在每個您想要忽略其更改的文件上明確設置它。您可以在一個命令這樣做:

git update-index --assume-unchanged -- file1 file2 file3 ... 

如果有非常多的文件,這可能是照本宣科,而是因爲你只似乎有大約15個文件,這將需要更長的時間才能使腳本(文件是在不同的目錄中),而不是僅僅將路徑複製粘貼到命令中。

+0

您好,謝謝您的回答。我已經有一個gitignore文件。但正如我所說,我添加了一些文件到回購(我用git add -f my_file)。但是現在即使他們在gitignore文件中,我也不可能刪除它們,git會在任何時候進行更改。感謝幫助 – lkartono 2013-03-10 09:30:07

+0

一旦你擁有了'git rm'd,它們就不會被跟蹤,'.gitignore'會被應用。如果Git不忽略它們,'.gitignore'中的條目可能與文件不匹配,或者您有其他干擾。 – 2013-03-10 09:31:41

+0

感謝您的回答。所以我沒有檢查我的gitignore和我的文件的路徑,被忽略。我只是再次做了git rm file_name,如果我再次運行git status,我得到了:modified:path/my_file – lkartono 2013-03-10 09:36:16