2010-07-02 52 views
7

我正在开发嵌入式Linux项目。我们的构建过程使得图像闪现到设备中。我们的许多文件需要root权限才能使系统正常工作。当我尝试拉动并修改其中一些文件时,我遇到了一个问题 - git无法写入这些文件,因此很难重置并执行sudo pull。然后,当我切换分支时,它说所有这些文件都“无法取消链接...”,但无论如何它都会切换分支,然后当我尝试切换回分支时,它不会让我,因为我进行了本地更改。你如何处理git中的文件所有权?

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

+3

所以,我很好奇 - 为什么你需要文件的所有权?没有它会破坏什么? – Amadan 2010-07-02 16:18:51

回答

7

我会构建你的系统,以便源文件不关心他们是什么所有者。你可以检查这些进出git,而不用担心他们拥有什么权限或者拥有者是谁(尤其是因为git部署可能会在所有系统中“拥有者”没有意义)。

当您想要生成嵌入式图像时,将所有内容复制到新目录中,然后然后根据需要设置权限。

+1

这实际上很容易实现。我做了一个查找-user root> rootlist.txt,并制作了一个脚本,将rootlist.txt中的文件传递给root,然后调用构建脚本,然后将文件传回给当前用户。 – 2010-07-02 20:17:48

+0

如果文件名有换行符,我以前评论中的解决方案将失败;最好使查找输出为空分隔的文件名。由于这个问题,我转而使用Buildroot来代替,这比我从零开始的设置好得多。 – 2012-07-14 14:53:57

3

最简单的方法(如果可能的话)是不做任何操作(克隆等)作为根,因为这会导致其他用户无法使用这些文件。

另一种方法是使用git init --shared为存储库设置共享(组或全部)权限,然后是git remote add origin http://host/repo.gitgit pull origin master。这基本上是一个权限不太严格的克隆。

1

我不确定我明白为什么有些文件必须是chowne'd root。直觉上我猜你的问题是对所有者的依赖,而不是Git不存储所有权。你在可以做的是chown在你身上。

5

建立在Karmastan的答案上,这里的魔术字是“构建脚本”。

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

相关问题