git - 提交并推送文件夹,然后停止跟踪

时间:2014-04-04 13:16:15

标签: git github

我需要将文件夹中的虚拟文件推送到我的仓库,这样它就会保持不变并作为示例。该文件位于子文件夹内,如下所示:

/main-repo/main-code.py
/main-repo/.gitignore
/main-repo/sub-folder/dummy-file.dat

我可以提交并推送这些文件和文件夹而不会出现问题。我之后需要做的是告诉git 停止跟踪sub-folder文件夹及其所有内容,同时 将其保留在回购(我使用Github

我尝试将sub-folder/*添加到.gitignore,但仍在跟踪更改。所以我尝试用缓存从缓存中删除文件:

git rm --cached sub-folder/dummy-file.dat

但是在我推后,这也从repo中删除了文件。

回顾一下:我想首先推送sub-folder/dummy-file.dat,之后停止跟踪该子文件夹任何文件的所有更改,同时保留我的仓库中子文件夹的初始状态。

这可能吗?

2 个答案:

答案 0 :(得分:2)

Git跟踪的文件正是分支上最后一次提交的文件,因此您无法在不从分支中删除文件的情况下停止跟踪文件。

我建议以不同的方式解决您的问题。

在我工作的项目上,当我们想要在repo中有一个示例配置文件时,我们遇到了类似的问题,但同时允许进行本地修改。我们解决它的方法是将文件提交到repo的.example扩展名,并将旧文件名添加到.gitignore。然后,如果您需要示例配置,则可以对其进行符号链接。

答案 1 :(得分:1)

我认为您正在寻找assume-unchanged的{​​{1}}标志 - 这将允许git忽略对跟踪文件的任何本地更改。

update-index

来自git update-index --assume-unchanged <file> 手册页

  

指定这些标志时,不会更新为路径记录的对象名称。相反,这些选项设置和取消设置&#34;假设不变&#34;路径的位。当&#34;假设不变&#34;位打开,Git停止检查工作树文件是否有可能的修改,因此您需要手动取消设置该位以在更改工作树文件时告诉Git。

要撤消上述效果,请使用:

git-update-index

因此,在初始推送之后,在每个文件上使用--assume-unchanged,GIT绝不会考虑更改这些文件,或者将它们包含在添加或提交操作中。