繁体   English   中英

gitignore 文件已在本地删除

[英]gitignore files have been deleted locally

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

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

我是否应该将分支分支 A(无核心文件)与分支 B(核心文件)合并,然后清除存储库并重新提交?

其实你的问题是多方面的。 首先,当您想删除要在分支上进一步跟踪的文件,但保留文件本身时,您将使用

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中的文件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

或类似的命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM