213*_*312 95 git version-control
我在我的git repo中有一个tmp目录我想仍然存在,但是被忽略了.我添加了它.gitignore
,但git status
仍然告诉我有关该目录中文件的更改.我试过了git rm -r --cached
,但是它将它从远程仓库中删除了.如何停止跟踪对此目录的更改,但仍然允许它存在?我还需要1个文件做到这一点,但变化是,在也出现git status
之后.gitignore
荷兰国际集团他们.我该怎么办?
duc*_*cin 176
相反的.gitignore
,你可以通过运行以下命令来更新本地的Git仓库:
git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在原始仓库中跟踪文件.您可以在本地仓库中修改它,git永远不会将其标记为已更改.阅读更多:
Mic*_*ant 11
在允许文件存在的同时忽略对文件所做的更改的确切目的.gitignore
.因此,添加文件(或目录).gitignore
是您唯一需要做的事情.
但是你的问题是git已经在跟踪你想要忽略的文件,.gitignore
并且不适用于跟踪的文件.停止跟踪的唯一方法是告诉git删除它们.通过使用git rm --cached
,可以防止git删除本地文件,但获取更改的任何其他存储库都将应用删除.我认为没有办法从你自己的存储库中避免这种情况.您必须在其他存储库上执行某些操作,否则将删除这些文件.
要防止在其他存储库中删除,您可以:
git rm --cached
提交文件和提交.Git很好地合并了两个删除,而没有触及已经未跟踪的文件./
在.gitignore
文件的目录名末尾添加一个,即
tmp/
Run Code Online (Sandbox Code Playgroud)
如果跟踪了该目录中的文件,则需要先告诉git忘记它们(在将dir添加到忽略列表之前).假设你没有任何重要的东西(即你可以抓它):
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"
Run Code Online (Sandbox Code Playgroud)
不会跟踪该目录中的新文件.
该--cached
选项git rm
仅适用于索引(或多或少有待更改).它对工作树或已跟踪或未跟踪的状态没有影响.
.gitignore 对跟踪的文件没有影响。
您想要的是在 tmp/ 目录中的文件上设置假设未更改位。这里有一个很好的解释如何做到这一点:Git:仅取消跟踪本地存储库中的文件并将其保留在远程存储库中
另外,用于在目录中的所有文件上设置假设未更改的单行代码 - git update-index --assume-unchanged on directory。
归档时间: |
|
查看次数: |
37400 次 |
最近记录: |