我试图找出最适合我情况的方法。我已从存储库中删除了所有内容并重新发送,以便我的gitignore文件能够正常工作。但是,我确实切换到仍在跟踪所有内容的另一个分支,然后检查了原始分支,现在这些文件不存在。
根据我的理解,这是正确的git行为,但我想知道如何停止跟踪这些核心文件,同时将它们保存在本地以使我的网站正常运行?
我应该将分支机构A(没有核心文件)与分支B(核心文件)合并,然后清除存储库并重新发送?
答案 0 :(得分:0)
实际上你的问题很多。首先,如果要删除要在分支上进一步跟踪的文件,但保留文件本身,则将使用
git rm --cached FILE
// possibly edit .gitignore here and `git add .gitignore`
git commit -m "removed the file FILE"
另一方面,您似乎希望将此作为网站内容或类似内容的结帐程序。
如果要合并A
和B
,似乎您希望所有分支都使用此规则(从索引中删除FILE)。这可以通过
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatched HEAD -- FILE'
。小心你的工作树中有FILE
或者在你的存储库外面有一个备份,因为你发出这个命令的HEAD会丢失所有这些文件的想法,所以你不能检查它们从历史中再次出来!您可能需要在工作树中使用它们,或者在>>之前备份过滤历史记录。
由于某些原因,我不喜欢将存储库放在工作目录附近,该工作目录可能包含跟踪文件,附加文件甚至来自其他存储库的文件,它们跟踪一组不同的文件。
对于这样的用例,为存储库使用第二个--work-tree通常很有用
git --work-tree=WHERE_YOU_PUBLISH_YOUR_FILES checkout HEAD -- .
将已跟踪的文件从HEAD签出到您的htdocs
或其他任何内容。在WHERE_YOU_PUBLISH_YOUR_FILES
内,您可以放置任何其他文件,而无需触及存储库。
您可以使用
检查存储库的跟踪文件与工作树的差异git --work-tree=WHERE_YOU_PUBLISH_YOUR_FILES diff
。您甚至可以将WHERE_YOU_PUBLISH_YOUR_FILES
中的文件签入存储库
git --work-tree=WHERE_YOU_PUBLISH_YOUR_FILES add -u
为简化此操作,我经常使用全局别名。
git config --global alias.public '!git --work-tree $(git config --get public.path)'
git config public.path /var/www/localhost/htdocs
现在你可以使用
git public status -s -uno
或类似的命令。