2011-01-06 121 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-分支。

希望有所帮助。