你如何处理git中的文件所有权?

7
我正在从事一个嵌入式Linux项目。我们的构建过程会生成一个映像文件,然后将其刷写到设备上。系统中有很多文件需要root权限才能正常工作。当我尝试拉取代码时,遇到了一个问题-其中一些文件已被修改,所以git无法写入这些文件。我尝试了reset hard和sudo pull,但是在切换分支时,它仍提示“无法解除链接…”所有这些文件,但是它仍切换了分支。然后,当我尝试切换回原来的分支时,由于我有本地更改,它不允许我这样做。

因此,我做错了什么;正确处理此问题的方法是什么?


3
那么,我很好奇- 为什么您需要文件的根拥有权?如果没有它会发生什么故障? - Amadan
4个回答

8
我建议你构建系统时不要让源文件依赖文件所有者。这样你就可以放心地将它们存入和取出 git,而不必担心权限或文件所有者的问题(特别是在 git 部署到多个系统时,“所有者”并没有意义)。
���你想要生成内嵌图片时,请将所有内容复制到一个新目录中,然后再根据需要设置文件权限。

1
实际上,这个实现起来相当容易。我使用了 find -user root > rootlist.txt 命令,并编写了一个脚本,将 rootlist.txt 中的文件 chown 给 root 用户,然后调用构建脚本,最后再将文件 chown 回当前用户。 - Shawn J. Goff
在我的上一条评论中提供的解决方案,如果文件名包含换行符,将会失败;最好使用find输出空字符分隔的文件名。自从遇到这个问题后,我已经开始使用Buildroot,它比我之前的自定义设置要好得多。 - Shawn J. Goff

5
为了补充Karmastan的答案,这里需要用到“构建脚本”的魔法词语。
Git中的文件不必像部署版本那样。你不会部署.c文件,而是先将其编译。同样,有些配置文件在部署/安装之前需要经过构建过程。

4
如果可能的话,最简单的方法是不要以root用户身份执行任何操作(克隆等),因为这会导致其他用户无法使用文件。另一种选择是使用“git init --shared”来设置存储库的共享(组或全部)权限,然后跟随“git remote add origin http://host/repo.git”和“git pull origin master”进行操作。这基本上是一个具有较少严格权限的克隆。

1

我不确定为什么有些文件必须chown为root。直觉上,我猜测你的问题是依赖于所有者,而不是Git不存储所有权。你可以在构建中使用chown


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接