版本控制软,将保留所有文件及其元数据从POSIX FS(EXT3 / EXT4)

情景

我正在为某些embedded式Linux设备开发Root FS。 它坐在主机上,通过NFS导出,我的开发板安装在“/”下。 我需要的工作stream程是: – 将我的FS分享给其他开发人员(他们拥有自己的开发板) – 将我的根FS备份到某个“服务器” – 将我的根FS部署到闪存盘或其他介质上 – 跟踪我的根FS中的特定文件的更改,分支和合并,回滚等。

伙计们,这在我看来是一个版本控制scheme,我甚至使用git

问题

正如你所知道的Git(和svn / mercurial / bazaar呢!)1)不存储特殊文件(/ dev下的设备文件等)2)不存储文件所有者和权限。 我想存储所有东西。

问题

你知道一些可以完成这个工作的VCS吗? 或者也许你知道另一个(但简单的)做我的scheme的解决scheme吗?

这是一个共同的问题…

我相信这是因为到目前为止,我听说过每个人(!)为他的目的而制定的脚本/钩子/定制软件。 我所需要的是一个全吃式的VSS

谢谢 !!

这是你的工具:

http://fsvs.tigris.org/

它有svn后端。

在做了类似的事情(为嵌入式Linux操作系统开发固件)之后,我发现将设备文件创建放入由构建系统调用的脚本中更好,而不是将设备文件直接存储在开发机器上。 然后创建文件的脚本进入版本控制,而不是文件本身,(BONUS)你不需要是root来修改它们。 而是通过fakeroot运行构建。

我想这不能直接回答你的问题,但可能值得考虑修改你的开发模式。 以root身份运行你的构建是不是一个好主意,因为如果你不小心在公共路径前面有“/”,会发生什么? 你可能会无意中用一堆连接到另一个架构的busybox替换/ bin。

我知道这似乎有点显而易见,但正如你没有提到过的那样:你是否考虑过将所有特殊文件放入普通文件的机制,例如放入tar档案中? 你可以使用任何版本控制系统来存储它,而且由于文件系统有大量的二进制数据,所以在完整的根文件系统的两个修订版本之间的区别并不是那么有用,所以你甚至不会丢失太多你的版本的功能控制系统提供。

initramfs是对userid groupid,permissioon问题的一个很好的答案。 在您的内核源代码目录中有scripts / gen_initramfs_list.sh。
该脚本允许您从多个来源构建一个initramfs存档。 你可以例如指定:

  • 一个目录:在这个基目录中找到的文件和目录将位于你的文件系统的根目录下。

  • 一个文件监听器:它是一个文本文件,对创建目录,文件和特殊设备文件非常有用。 看下面的例子

如果您以非root用户身份开发,并且您的rootfs位于rootfsdir中,那么rootfsdir中的文件可能属于您。 gen_initramfs_list可以将你的uid,gid转换成0,0。下面是一个例子命令行:

gen_initramfs_list -u $MYUID -o initramfs.gz rootfsdir/ device.txt 

其中device.txt包含:

 # This is a very simple, default initramfs dir /dev 0755 0 0 nod /dev/console 0600 0 0 c 5 1 dir /root 0700 0 0 # file /kinit usr/kinit/kinit 0755 0 0 # slink /init kinit 0755 0 0 

然后你可以使用标准的版本控制你的rootfsdir内容,并在版本控制下添加device.txt文件,在这里你是:内容和文件属性版本:)。

我不知道是否可以通过文件列表来源更改目录源文件的权限和uid / gid,但这是一个逻辑功能。
当然,您可以从最小的根fs开始,从中挂载您现有的nfs_export。

这是一个常见的问题,gen_initramfs_list是解决它的工具。

为什么不使用rsync? 就像rsnapshot( http://www.rsnapshot.org )会做你想做的。 或者Unison( http://www.cis.upenn.edu/~bcpierce/unison/ )是为此而明确设计的 – 它将自身描述为一个跨版本控制的文件同步技术,可能是您需要的。