gitignore文件已在本地删除

时间:2015-07-04 08:48:29

标签: git

我试图找出最适合我情况的方法。我已从存储库中删除了所有内容并重新发送,以便我的gitignore文件能够正常工作。但是,我确实切换到仍在跟踪所有内容的另一个分支,然后检查了原始分支,现在这些文件不存在。

根据我的理解,这是正确的git行为,但我想知道如何停止跟踪这些核心文件,同时将它们保存在本地以使我的网站正常运行?

我应该将分支机构A(没有核心文件)与分支B(核心文件)合并,然后清除存储库并重新发送?

1 个答案:

答案 0 :(得分:0)

实际上你的问题很多。首先,如果要删除要在分支上进一步跟踪的文件,但保留文件本身,则将使用

git rm --cached FILE
// possibly edit .gitignore here and `git add .gitignore`
git commit -m "removed the file FILE"

另一方面,您似乎希望将此作为网站内容或类似内容的结帐程序。

如果要合并AB,似乎您希望所有分支都使用此规则(从索引中删除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

或类似的命令。