2010-10-06 65 views
6

場景版本控制軟,將保留所有文件和POSIX FS(EXT3/EXT4)

我正在開發一些嵌入式Linux設備根FS它們的元數據。它坐在主機上,通過NFS導出,我的開發板安裝在「/」下。 我需要的工作流程爲: - 將我的FS分享給其他開發者(他們擁有自己的開發板) - 將我的根FS備份到某些「服務器」 - 將我的根FS部署到閃存盤或其他媒體 - 跟蹤特定文件的變化在我的根文件系統,分支&合併,回滾等

傢伙,這在我看來,作爲一個版本控制的情況下,我甚至使用git。

的問題

正如你所知道的Git(和svn /善變/集市呢!)1)不保存特殊文件(設備文件在/ dev下等); 2)不存儲文件所有者和權限。 我想存儲所有東西。

問題

你知道一些VCS是將做的工作? 或者您可能知道另一個(但很簡單)的解決方案來完成我的場景嗎?

它是一個普遍的問題...

我認爲,這是因爲到現在我聽說過腳本/鉤/定製軟大家(!)的作品爲他的目的。所有我需要的是一個全食用VSS

謝謝!

回答

2

我知道這看起來有點顯而易見,但正如你還沒有提到過的那樣:你是否考慮過將所有特殊文件放入常規文件的機制,例如放入tar檔案中?你可以用任何版本控制系統來存儲它,並且由於文件系統有大量的二進制數據,所以在完整的根文件系統的兩個版本之間差別不大,所以你甚至可能不會失去太多你的版本的功能控制系統提供。

+0

如何幫助焦油?現在我有一個目錄樹。我可以通過計算機(通過NFS,rsync或其他)複製它(或其中的部分/文件),但我無法跟蹤更改,將其與其他開發人員分開/推送,分支/合併等。歸檔所有內容不會更改此內容情況。 – LiMar 2010-10-07 13:54:29

4

在做了類似的事情(爲嵌入式Linux操作系統開發固件)之後,我發現最好將設備文件創建放入構建系統調用的腳本中,而不是直接在設備上存儲設備文件。然後,創建文件的腳本進入版本控制,而不是文件本身,並且(BONUS)不需要用root來修改它們。改爲通過fakeroot運行構建。

我想這不會直接回答你的問題,但可能值得考慮修改你的開發模型。以root身份運行你的構建不是一個好主意,因爲如果你意外地在共同路徑前面有「/」,會發生什麼?您可能會無意中用一堆針對不同體系結構構建的busybox的鏈接替換/ bin。

+0

嗯。那麼......我沒有一個「構建系統」。完全一樣。我不需要它。我運行了debootstrap(或rootstock),並獲得了基本的系統,我一直在用新包,改變的配置文件,我自己的二進制文件等進行擴展。我討厭每個人都在談論「一個腳本會......」,因爲我們都缺乏適當的工具來存儲我們的文件。我更喜歡將我的/ dev未跟蹤和rsync所有我的Root FS存儲到其他開發人員,當他們需要它時... 而且無論如何...謝謝你的答案,男人! – LiMar 2010-10-07 12:37:46

+0

那麼,Git是開源的......你可以添加對設備文件的支持。他們已經完成了符號鏈接,您可以將其用作參考。但是我必須問:你正在構建的這個設備是否會自行運行,沒有NFS鏈接到它自己的根文件系統?那時,你可能會發現你需要一個構建系統... – Jonathan 2010-10-07 13:02:46

+0

當然,該設備將是獨立的。 NFS僅用於開發時間。但是我們已經發布了類似的設備而沒有任何構建系統:RootFS-developer在他的硬盤驅動器上創建了RootFS(沒有任何變更跟蹤/ VCS),其他開發者只是給他發送了二進制文件......我討厭這種做法,但至少它工作。 現在......我是RootFS開發者。 – LiMar 2010-10-08 11:01:09

2

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,但這是一個邏輯功能。
當然,您可以從最小的root fs開始,從中掛載您現有的nfs_export。

這是一個常見問題,而gen_initramfs_list是解決它的工具。

+0

哇。有趣。我從來沒有想過initramfs作爲版本控制助手...但它如何恢復權限?我會探索你的解決方案。我無法將其標記爲一段時間的解決方案,但我很高興達到+1。謝謝 ! – LiMar 2010-10-07 13:02:07

相關問題