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

如何处理git中的文件所有权?,git,permissions,Git,Permissions,我正在做一个嵌入式Linux项目。我们的构建过程会生成一个图像,并将其闪存到设备上。我们的许多文件都需要root所有权才能使系统正常工作。我在尝试拉取时遇到了一个问题,其中一些文件被修改了——git无法写入这些文件,所以硬复位和sudo拉取了。然后当我切换分支时,它对所有这些文件都说“无法取消链接…”,但它还是切换了分支,然后当我尝试切换回分支时,它不允许我,因为我有本地更改 所以我没有做正确的事情;正确的处理方法是什么?最简单的方法(如果可能的话)是不作为root用户执行任何操作(克隆等),因

我正在做一个嵌入式Linux项目。我们的构建过程会生成一个图像,并将其闪存到设备上。我们的许多文件都需要root所有权才能使系统正常工作。我在尝试拉取时遇到了一个问题,其中一些文件被修改了——git无法写入这些文件,所以硬复位和sudo拉取了。然后当我切换分支时,它对所有这些文件都说“无法取消链接…”,但它还是切换了分支,然后当我尝试切换回分支时,它不允许我,因为我有本地更改

所以我没有做正确的事情;正确的处理方法是什么?

最简单的方法(如果可能的话)是不作为root用户执行任何操作(克隆等),因为这会导致其他用户无法处理文件


另一种方法是使用
git init--shared
为存储库设置共享(组或全部)权限,然后是
git远程添加源http://host/repo.git
和一个
git pull原始主机
。这基本上是一个权限不那么严格的克隆。

我会构建您的系统,使源文件不在乎它们是什么所有者。您可以将这些文件签入和签出git,而不必担心它们拥有什么权限或所有者是谁(特别是因为“所有者”在git部署可能服务的所有系统中都没有意义)


如果要生成嵌入的映像,请将所有内容复制到新目录,然后根据需要设置权限。

我不知道为什么有些文件必须是
chowne
'd root。直觉上我猜你的问题在于对所有者的依赖,而不是Git不存储所有权。你所能做的就是在你的构建中
chown

在Karmastan的答案的基础上,这里的神奇词语是“构建脚本”


git中的文件不必看起来像部署版本。您不需要部署.c文件,而是首先编译它们。同样,一些配置文件也可以在部署/安装之前经过构建过程。

所以,我很好奇-为什么您需要文件的root所有权?如果没有它,什么会中断呢?事实证明这很容易实现。我做了一个find-user root>rootlist.txt,并编写了一个脚本,将rootlist.txt中的文件发送到root,然后调用构建脚本,然后将文件发送回当前用户。如果文件名有换行符,我前面评论中的解决方案将失败;最好将find输出设为空分隔文件名。由于这个问题,我转而使用Buildroot,这比我从头开始的设置要好得多。