繁体   English   中英

使用 gitignore 忽略(但不删除)文件

[英]using gitignore to ignore (but not delete) files

我的 git 存储库中有一个 tmp 目录,我希望仍然存在,但请忽略。 我将它添加到.gitignore ,但git status仍然告诉我该目录中文件的更改。 我试过git rm -r --cached ,但这会将其从远程仓库中删除。 如何停止跟踪对此目录的更改,但仍允许它存在? 我还需要对 1 个文件执行此操作,但是在.gitignore对它们进行更改之后,对它们的更改也会显示在git status中。 我应该怎么办?

您可以通过运行以下命令来更新本地 git 存储库,而不是.gitignore

git update-index --assume-unchanged <file>

在这种情况下,原始存储库中正在跟踪文件。 您可以在本地存储库中对其进行修改,git 永远不会将其标记为已更改。 阅读更多:

在允许文件存在的同时忽略对文件所做的更改是.gitignore的确切目的。 因此,将文件(或目录)添加到.gitignore是您唯一需要做的事情。

但是您的问题是 git 已经在跟踪您要忽略的文件,并且.gitignore不适用于跟踪的文件。 停止此跟踪的唯一方法是告诉 git 删除它们。 通过使用git rm --cached ,您可以防止 git 删除您的本地文件,但任何其他获得您更改的存储库都将应用删除。 我认为没有办法从您自己的存储库中避免这种情况。 您必须在其他存储库上执行某些操作,否则接受文件将被删除。

为了防止在其他存储库上被删除,您可以:

  • (显然)在某处备份文件,拉取更改并恢复文件,
  • 或者git rm --cached文件并在拉取更改之前提交。 Git 将很好地合并这两个删除,而不会触及已经未跟踪的文件。

在你的.gitignore文件中的目录名末尾加上/ ,即

tmp/

如果在该目录中有跟踪文件,您需要告诉 git 先忘记它们(在将目录添加到忽略列表之前)。 假设您在那里没有任何重要的东西(即您可以刮擦它):

git rm -rf ./tmp/
git commit -m "untrack tmp dir"
mkdir tmp
echo tmp/ >> .gitignore
git add .gitignore ; git commit -m "add tmp/ to ignore list"

该目录中的新文件将不会被跟踪。

git rm--cached选项仅适用于索引(或多或少有待更改)。 它对工作树或已跟踪内容的状态没有影响。

.gitignore 对跟踪的文件没有影响。

您想要的是在 tmp/ 目录中的文件上设置假设不变位。 这里有一个很好的解释: Git: untrack a file in local repo only and keep it in the remote repo

此外,用于在目录中的所有文件上设置假设不变的单行 - git update-index --assume-unchanged on directory

听起来您正在尝试跟踪文件(例如index.php ),将其添加到远程存储库,然后停止观看跟踪它,同时将文件保留在远程(即在更改时保持index.php在远程存储库上保持不变)它在本地)。

据我了解,git 无法做到这一点。 您可以跟踪文件,也可以不跟踪。 如果您跟踪一个文件,它存在于远程仓库中,并在您提交更改时更改。 如果您不跟踪文件,则远程存储库中不存在该文件。

由于 git 无法完全按照您的要求进行操作,因此可能还有其他解决方案,具体取决于您的具体情况。 例如,当您在本地更改index.php时,为什么不希望远程更改它? 文件中是否有用户特定的设置? 如果是这种情况,您可以这样做:

cp index.php index_template.php
git rm --cached index.php

现在将 index_template.php 编辑为您希望它出现在远程仓库中的样子。 在您的 README 中添加一些内容,告诉使用您的存储库的人,一旦他们克隆它,他们必须将 index_template.php 复制到 index.php 并对其进行编辑以满足他们的需要。

git add index_template.php
git add README
git commit -m 'added template index.php file'
git push

当有人克隆你的仓库时,他们必须创建自己的index.php 您已经为他们简化了:只需将index_template.php复制到index.php并使用特定于计算机的设置进行修改。

暂无
暂无

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

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