我的主目录结构是/ site_program_files / users / usr1
我不希望Git触及/ users目录和子目录中的内容...... 所以,我已经将/ users添加到我的.gitignore文件中,然后执行提交然后推送。并且还删除了git rm -rf / users之前的内容。
但是现在,每次我推送它都会删除我的用户在托管网站上的/ users目录中更新的所有文件。我想要的只是让git不影响服务器上/ users子目录中的内容,无论我在本地版本上测试的是什么。我做错了什么?
答案 0 :(得分:3)
(我假设您的托管网站有某种自动部署脚本。除非您显示此脚本,否则我们必须对其做出一些假设。现在我假设它主要或仅由git checkout
命令组成。)
编辑:实际的部署代码似乎是一个自定义的OpenShift Ruby脚本(此链接页面上永远不会显示):https://developers.openshift.com/en/managing-deployments.html。熟悉OpenShift和Ruby的人可能会评论默认部署脚本的真正功能。如果它不只是git checkout
(并且显然不是),则下面的一些假设不太可能成立。
编辑2:这最终会出现一个关于OpenShift的问题。这个问题似乎与git毫无关系。
你无法在git中解决这个问题,至少在没有自定义黑客的情况下也是如此。原因很简单:
就git所知,您(在托管网站上)要求它从$old_commit
(无论是哪个ID)移动到$new_commit
(另一个ID)。
因此,git会比较$old_commit
中的$new_commit
与users/usr1/foo
中的内容。
旧提交包含文件users/usr2/bar
和$old_commit
。新提交没有。
因此,git必须删除这些文件,以便正确地从旧文件转换为新文件。
Git会在每次从<{1}}移动到$new_commit
时执行此操作,因为这些是将工作树从$prev_commit
转换为{{}}所需的说明{1}}。在$new_commit
中,文件位于$new_commit
(doesn't mean "ignore", really)中并不重要:重要的是它们位于.gitignore
而不是$old_commit
1}}。
但是,我们可以观察另一件事:运气好的话,git只会在$new_commit
转换为$old_commit
一次。那么,我们需要做的是,在托管网站上:
这里的缺点是,如果你曾经做以某种方式回到托管网站上的$new_commit
- 或者实际上,任何旧的提交都有这些文件 - 然后将其转换为$old_commit
(或任何不再有文件的新提交),git会再次删除文件。
如果git有一个忽略语法和/或文件将特定文件标记为&#34;宝贝,不要破坏,但不要来源控制,这可能会很好。&#34 ;;但它没有(至少今天没有)。