2016-01-25 64 views
1

我有一个版本化的目录,其中包含一些pdf资源,这些资源不太适合版本控制,但仍然需要在那里一些我实际上想要版本化的html文件。测试服务器和生产服务器上都存在相同的文件夹,我使用git将更改从一台服务器部署到另一台服务器。我想从版本中删除pdf,而不从任一服务器上的工作目录中删除它们。如何删除Git版本中的文件,而不删除它们,在本地和开放REMOTE存储库

我用git rm -r --cached,从混帐回购协议中删除它们没有从我的工作目录中删除它们,我已经将它们添加到.gitignore这样的Git不会看到它们作为未跟踪文件,但是当我提交更改并将更改拉到我的其他服务器上,所有这些pdf将从其他服务器上的工作目录中删除。我希望他们留下来。有什么建议?

注意,这不是涉及从缓存中删除,而不从本地文件系统删除的问题重复。这是关于分布式情况。

+0

您是否将.gitignore更改作为单独提交进行提交,或者在删除pdf时进行同样的提交? – AdmSteck

+0

我在同一个提交中添加了.gitignore作为从缓存中删除pdf的方法 – Jibbyj

回答

1

做服务器上执行以下操作:

  • git pull得到改变,PDF文件会暂时消失。
  • git reset HEAD~1 --hard这应该会让你回到提交pdf之前的提交。 HEAD〜1是当前提交之前提交的简写。如果这些文件在之前提交了一些提交,那么在删除pdf之前,可以用提交的SHA替换HEAD〜1。
  • git reset ORIG_HEAD --mixed这会将您的分支指向正确的提交并重置暂存区域,但不会重置工作目录中的文件。
  • 如果.gitignore在删除pdf的同一提交中被修改,则需要git checkout -- .gitignore才能将其恢复。

完成这些步骤后,pdfs仍然存在,您的回购应该是最新的。

+0

哦,那个人太漂亮了。 – Jibbyj

0

按照以下步骤..

  1. 添加的所有PDF文件
  2. 按压的编码
  3. 更新的.gitignore
  4. 做一个承诺一推再次

这样的git服务器上的文件不会被删除。但是因为它们在.gitignore中,所以它们不会被版本化。意思是当你拉一下,你也会得到pdf。例如,看看this repo。它有两个文件,asd.txtqwe.txt,其中asd.txt使用.gitignore被忽略。但是,当你拉动代码时,你会得到这两个文件。

+1

已经添加的.pdf文件仍将被跟踪; '.gitignore'只会阻止添加新的* .pdf文件。 – mipadi

相关问题