如何在Git中从版本控制中删除文件而不删除它们,本地和ON REMOTE存储库

时间:2016-01-25 21:36:20

标签: git

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

我使用了git rm -r --cached,它将它们从git repo中删除而不将其从我的工作目录中删除,我已将它们添加到.gitignore,因此Git不会将它们视为未跟踪的文件,但是当我提交更改并将更改提取到我的其他服务器时,所有这些pdf都会从另一台服务器上的工作目录中删除。我希望他们留下来。有什么建议?

请注意,这是重复的问题,涉及从缓存中删除而不从本地文件系统中删除。这是一个分布式场景。

2 个答案:

答案 0 :(得分:1)

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

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

完成这些步骤后,pdf应该仍然在那里,你的回购应该是最新的。

答案 1 :(得分:0)

请按照以下步骤操作..

  1. 添加所有pdf文件
  2. 推送代码
  3. 更新.gitignore
  4. 再次提交
  5. 这样,git服务器上的文件就不会被删除。但由于他们在.gitignore,他们不会被版本化。意思是当你拉动时,你也会得到pdfs。

    例如,请查看this repo。它有两个文件asd.txtqwe.txt,其中使用.gitignore忽略asd.txt。但是,当你拉动代码时,你将得到两个文件。