2011-01-06 107 views
4

你使用git必須遵循的確切步驟是什麼?我會給我的程序(這是,不知何故,沒有工作很順利):GIT並推送忽略的文件

- cloned a repository: (works fine) 
- added settings files to .gitignore to prevent overwriting the originial 
    settingfiles on the remote (= test environment) 
- made changes to my local repository and committed it locally (works fine) 
- pushed it from local to remote (did not work properly) 

當按下遠程遙控器上的settingfiles被刪除,這引起了我的測試envirnment死。我只是想設置文件被忽略,如果我推,而不是刪除。

我做錯了什麼/忘記了?有任何想法嗎?

回答

3

從我個人理解,在settingsfile已經跟蹤了你克隆混帳回購協議。這意味着即使您將其添加到.gitignore,它仍會被跟蹤。

從歷史記錄中刪除該文件,並確保它在未來不理你應該

  • 將其添加到.gitignore(因爲你已經做了)
  • 運行git filter-branch --index-filter 'git rm --cached --ignore-unmatch settingsfile' HEAD

請注意,您需要爲每個存在該文件的分支運行上述命令。

,那麼你需要git push -f origin master(如果master是分支的名稱,origin遠程的名字),你可以參考this guide,瞭解更多信息

。另外,正如Rafid K. Abdullah所說,你還沒有刪除任何東西(如果你遵循了你在文章中描述的工作流程);您剛剛添加了可輕鬆恢復的修改。這是什麼git是畢竟:)

0

不要將設置文件添加到.gitignore文件,而是將您對設置文件的更改保存爲git stash按照原樣按&拉。完成後,使用git stash apply恢復您的設置文件。

2

我明白的設置文件,你所談論的是你的設置,而不是git的文件夾中。如果我理解正確,那麼它並不總是能夠將它們添加到.gitignore,因爲所有.gitignore所做的就是當您使用'git commit -a','git diff'時它不會在本地檢查這些文件,等等,但是如果你已經在你的本地存儲庫上有了它們,那麼它們將被推送到遠程服務器。

話雖如此,我不認爲你失去了你的設置中的遠程服務器上的文件,因爲你所做的一切是增加更多的提交,所以你必須找到在歷史上的設置文件。

總之,不幸的是,不像SVN,如果你只是學一些步驟來使用GIT,你總是會犯錯誤。我在開始時犯了許多錯誤,然後承認我必須閱讀一本關於它的書。但首先,我想了解它的概念,因爲這有時會造成麻煩(例如'起源大師'和'起源/主人'之間有什麼區別,等等),所以我找到了這個非常有用的頁面,我建議你閱讀:

http://www.eecs.harvard.edu/~cduan/technical/git/

而且我還發現這非常有趣的書:

http://progit.org/book/

你不必把它讀完,只是讀的基礎和最末端importantly-分支。

希望有所幫助。