【发布时间】:2018-05-23 10:17:48
【问题描述】:
我知道类似的问题已经被问过多次,但我无法让它适用于我的案例。
我在哪里: 我有一个本地存储库,我推送到实时服务器,其中包括 /content 文件夹及其子文件夹。在生产过程中这没问题,因为我可以对 /content 进行更改并推送它们。但由于这是一个使用 CMS 的网站,所有对 /content 的更改现在都将远程生成。
我想去的地方: 我现在想从代码库中“分离” /content 及其子文件夹,这样我就可以在本地删除庞大的 /content 文件夹,而不会在实时服务器上将其删除。这样我仍然可以对代码进行更改并将它们推送到服务器,而人们可以使用 CMS 在 /content 文件夹中创建文件和更改。
所以到目前为止我做了什么:
- 将文件夹添加到 .gitignore:
/content/
- 从索引中删除了文件夹:
git rm -r --cached content/*
- 尝试设置假设不变,以便在推送时不会从实时服务器中删除 /content 中的文件:
git update-index --skip-worktree
当我这样做时,我当然会得到:
致命:无法标记文件
由于文件在 .gitignore 中,它们需要保留在那里,以便将来忽略该文件夹。那我该怎么办?
【问题讨论】:
-
好的,当我最初阅读这篇文章时,我了解到您在原点上运行了 3 个步骤(我的回答部分基于这种理解),但从其他答案的 cmets 中,我会说不清楚.那么:您在哪个 repo(源或本地克隆)上运行了这些步骤?
-
好的,所以遥控器是我一直推送到的一个裸仓库,仅此而已。自从我从 CMS 存储库克隆以来,我只使用过本地存储库,它是源/主存储库。这也是我从中得到的,等等
-
我会非常满意一个解决方案,我完全删除文件夹并在之后添加它,同时忽略它以供将来提交,但这似乎也不起作用(我尝试删除文件夹,提交并推送,然后添加到 gitignore 并从索引中删除并使用 add --force 重新添加,但是当我在那之后删除本地文件夹时,即使之前被忽略和删除,更改也不会被跟踪提交)。我知道我对 git 的理解很差,但似乎不可能做到这一点。
-
好的...如果远程是裸机,那么您将如何更新生产服务器?您在问题中说“推送到实时服务器”;这意味着服务器是非裸远程。
-
我只是做 git push
,并最初将其设置为一个裸仓库,因为这是推荐的部署,我现在了解到,根本不推荐。所以也许它不是裸露的,但是当我在服务器上执行 git status 时,它告诉我没有 repo。所以,好吧,我迷路了。但是,推送确实没有任何问题。
标签: git gitignore git-assume-unchanged