我需要将文件夹中的虚拟文件推送到我的仓库,这样它就会保持不变并作为示例。该文件位于子文件夹内,如下所示:
/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
,之后停止跟踪该子文件夹中任何文件的所有更改,同时保留我的仓库中子文件夹的初始状态。
这可能吗?
答案 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绝不会考虑更改这些文件,或者将它们包含在添加或提交操作中。