初始推送后Git忽略文件(只读)

初始推送后Git忽略文件(只读),git,Git,我想将该文件的初始版本提交给Git,然后禁止修改该文件。如何做到这一点? 我试过: -在初始推送之后将文件添加到.gitignore(但这不起作用,因为文件已经被跟踪)。 -git rm-rf--缓存,但在下次提交时会从存储库中删除文件。如果您考虑使用.gitignore,我假设您可以为此配置每个本地存储库。如果是这样,您可以使用git update index--skip worktree path/to/file。这将阻止提交和/或跟踪对文件的更改。我在编程时遇到了同样的问题。我的项目有一个

我想将该文件的初始版本提交给Git,然后禁止修改该文件。如何做到这一点? 我试过: -在初始推送之后将文件添加到.gitignore(但这不起作用,因为文件已经被跟踪)。
-git rm-rf--缓存,但在下次提交时会从存储库中删除文件。

如果您考虑使用.gitignore,我假设您可以为此配置每个本地存储库。如果是这样,您可以使用git update index--skip worktree path/to/file。这将阻止提交和/或跟踪对文件的更改。

我在编程时遇到了同样的问题。我的项目有一个名为
setting.cfg
的文件。但我的同事们应该为他自己的环境做些改变。我们希望共享
setting.cfg
文件,并在不推送到远程存储库的情况下对其进行更改

最后,我们创建了一个名为
setting.cfg_bak
的文件,并忽略
setting.cfg

git rm setting.cfg
echo "setting.cfg" >> .gitignore`

如果要使用该文件,应将
setting.cfg_bak
复制到
setting.cfg
,并根据自己的需要修改
setting.cfg
。在此之后,修改将不会推送到远程存储库。

据我所知,您无法保护单个文件,甚至无法对本地克隆的repo进行修改。但是,您可以保护远程服务器上的分支。
.gitignore
在这里无能为力。您可以编写一个本地
预提交
,如果所需文件被修改,它将拒绝提交。本地Git钩子不会复制到服务器,也不会阻止其他开发人员修改该文件。服务器端钩子更有效,“我想将文件的初始版本提交给Git,然后不允许对该文件进行修改”——这对Git来说不是一件自然的事情。你在和工具抗争。你为什么要这样做?它是一个配置文件吗?处理这类事情有很多行之有效的模式。这不是git可以做的,或者至少我不知道如何做,但你可以在gitlab中做。我认为git lfs中也有类似的东西,请看这里:@axiac是的,我同意,做所需事情的唯一方法是使用服务器端git钩子。还有一个gitlab特性提供了同样的功能,但我不使用gitblabatm。Thx for then input every1.这就是我们目前正在做的,但我想弄清楚,我们是否可以在不需要复制/粘贴的情况下以某种方式自动化它。如果您可以提交setting.cfg和
git update index--skip worktree setting.cfg
,为什么要对名为setting.cfg_bak的文件进行版本化?这样,每个用户都可以更新自己的setting.cfg副本,而无需担心提交更改。我的回答似乎与您要求的完全一致。如果您克隆存储库并对其进行更改,则不会起作用。在这种情况下,克隆存储库的每个人都应该执行该命令。复制
设置.cfg_bak
文件并不容易,也不简单。如果有人更改了文件并忘记执行命令,可能会更加危险。是的,但是每个程序员都需要在本地执行skip worktree命令,如果有人忘了执行,他会在下一次推送时踩下我们的更改(很明显,这是我们目前的做法,但我只是想知道有没有更好的办法)