文件管理 - Linux

By Kristin
at 2012-08-29T01:11
at 2012-08-29T01:11
Table of Contents
version control系統以我用過軟體的分成兩類
1. centralized - subversion, perforce
2. distributed - git
不管哪一類主要都是要提供
1. 在共同作者之間進行版本同步
2. 保存改版的歷史紀錄
如果是text file, 通常都能很容易做diff跟merge
不過你們的應用binary file, 除非你提供version control系統diff跟merge的工具
不然沒有一種系統可以幫你查到兩個版本之間的差距
以你們現在的做法(copy-rename-edit), 我覺得git可以提供一些好處
1. git可以離線工作 - git local repository跟git server一樣擁有所有的
revision history,不需要連上server取得某特定版本的文件,缺點是
local repository會佔掉很大的硬碟空間,尤其是binary file的repo
例如:DOC.doc這個檔案依序產生過A,B,C三個版本,假設各為200KB
用copy-rename-edit方法在硬碟上會有DOC_A.doc, DOC_B.doc, DOC_C.doc三個檔案
在git repo上會只有一個DOC.doc,有三筆改版記錄
如果都不考慮丟棄舊版本(A,B),兩種方法使用差不多的硬碟空間(600KB)
如果使用copy-rename-edit方法刪除DOC_A.pdf和DOC_B.pdf,就會較省空間
git也有方法可以省空間,將DOC_C.doc放到一個全新的repo中,放棄之前的改版資訊
2. git diff - git 可以設定textconv tool,讓一個懂特定binary file格式的外部
工具先將該binary file擷取出text之後交給diff tool處理
舉個例子,我有個git repo裡面管裡了一個名叫"Untitled 1.odt"的檔案
jckuo@jckuo-vm64:~/mytest$ ls
Untitled 1.odt
用git log查看,得知有兩個版本
jckuo@jckuo-vm64:~/mytest$ git log
commit 8067e00020b919c61616f778db44cc2e751c1b1c
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:23:10 2012 +0800
revision 2
commit 55261ab8f2d44ad06b2c2b96bc58a71f216dfac4
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:21:55 2012 +0800
revision 1
用git show 查看第一個版本得知此版本新增三行
jckuo@jckuo-vm64:~/mytest$ git show
55261ab8f2d44ad06b2c2b96bc58a71f216dfac4
commit 55261ab8f2d44ad06b2c2b96bc58a71f216dfac4
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:21:55 2012 +0800
revision 1
diff --git a/Untitled 1.odt b/Untitled 1.odt
new file mode 100644
index 0000000..6a9df92
--- /dev/null
+++ b/Untitled 1.odt
@@ -0,0 +1,3 @@
+
+abcd
+
用git show 查看第二個版本得知此版本刪除一行新增三行
jckuo@jckuo-vm64:~/mytest$ git show
8067e00020b919c61616f778db44cc2e751c1b1c
commit 8067e00020b919c61616f778db44cc2e751c1b1c
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:23:10 2012 +0800
revision 2
diff --git a/Untitled 1.odt b/Untitled 1.odt
index 6a9df92..4f1ac12 100644
--- a/Untitled 1.odt
+++ b/Untitled 1.odt
@@ -1,3 +1,5 @@
-abcd
+Abcd
+
+efgh
在merge的部分,不管你是用哪種版本控制,大概都需要人工做merge
※ 引述《Landau (賴宏道)》之銘言:
: 不是很確定這樣的問題是否適合在這裡問,
: 不過我想這裡的大大應該能給我一點意見。
: 如果版主覺得不行請通知我,我會自刪,謝謝。
: 我目前在一個物理所Lab工作,
: 有很多的實驗數據和分析產生的文件要儲存,
: 這些檔案被集中管理在server上。
: 問題出在,有些文件會被修改,於是檔名會長得像「主旨_人名_最後修改日期」這樣,
: 另外老師會有離線編輯的需求,也就是沒辦法連到server的時候,
: 他會拿著備份的硬碟工作,之後再傳到server上(這部分是我想的,不是很確定)。
: 另外本Lab有備份方面的問題,目前備份的方法是複製貼上,
: 雖然沒有大問題,但我覺得怪怪的。
: 由於我們資料頗多(幾百G),我覺得應該要有更有效率的管理方式,
: 各位大大能給我甚麼建議嗎?
: 謝謝<(_ _)>
--
1. centralized - subversion, perforce
2. distributed - git
不管哪一類主要都是要提供
1. 在共同作者之間進行版本同步
2. 保存改版的歷史紀錄
如果是text file, 通常都能很容易做diff跟merge
不過你們的應用binary file, 除非你提供version control系統diff跟merge的工具
不然沒有一種系統可以幫你查到兩個版本之間的差距
以你們現在的做法(copy-rename-edit), 我覺得git可以提供一些好處
1. git可以離線工作 - git local repository跟git server一樣擁有所有的
revision history,不需要連上server取得某特定版本的文件,缺點是
local repository會佔掉很大的硬碟空間,尤其是binary file的repo
例如:DOC.doc這個檔案依序產生過A,B,C三個版本,假設各為200KB
用copy-rename-edit方法在硬碟上會有DOC_A.doc, DOC_B.doc, DOC_C.doc三個檔案
在git repo上會只有一個DOC.doc,有三筆改版記錄
如果都不考慮丟棄舊版本(A,B),兩種方法使用差不多的硬碟空間(600KB)
如果使用copy-rename-edit方法刪除DOC_A.pdf和DOC_B.pdf,就會較省空間
git也有方法可以省空間,將DOC_C.doc放到一個全新的repo中,放棄之前的改版資訊
2. git diff - git 可以設定textconv tool,讓一個懂特定binary file格式的外部
工具先將該binary file擷取出text之後交給diff tool處理
舉個例子,我有個git repo裡面管裡了一個名叫"Untitled 1.odt"的檔案
jckuo@jckuo-vm64:~/mytest$ ls
Untitled 1.odt
用git log查看,得知有兩個版本
jckuo@jckuo-vm64:~/mytest$ git log
commit 8067e00020b919c61616f778db44cc2e751c1b1c
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:23:10 2012 +0800
revision 2
commit 55261ab8f2d44ad06b2c2b96bc58a71f216dfac4
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:21:55 2012 +0800
revision 1
用git show 查看第一個版本得知此版本新增三行
jckuo@jckuo-vm64:~/mytest$ git show
55261ab8f2d44ad06b2c2b96bc58a71f216dfac4
commit 55261ab8f2d44ad06b2c2b96bc58a71f216dfac4
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:21:55 2012 +0800
revision 1
diff --git a/Untitled 1.odt b/Untitled 1.odt
new file mode 100644
index 0000000..6a9df92
--- /dev/null
+++ b/Untitled 1.odt
@@ -0,0 +1,3 @@
+
+abcd
+
用git show 查看第二個版本得知此版本刪除一行新增三行
jckuo@jckuo-vm64:~/mytest$ git show
8067e00020b919c61616f778db44cc2e751c1b1c
commit 8067e00020b919c61616f778db44cc2e751c1b1c
Author: JC Kuo <[email protected]>
Date: Wed Aug 29 00:23:10 2012 +0800
revision 2
diff --git a/Untitled 1.odt b/Untitled 1.odt
index 6a9df92..4f1ac12 100644
--- a/Untitled 1.odt
+++ b/Untitled 1.odt
@@ -1,3 +1,5 @@
-abcd
+Abcd
+
+efgh
在merge的部分,不管你是用哪種版本控制,大概都需要人工做merge
※ 引述《Landau (賴宏道)》之銘言:
: 不是很確定這樣的問題是否適合在這裡問,
: 不過我想這裡的大大應該能給我一點意見。
: 如果版主覺得不行請通知我,我會自刪,謝謝。
: 我目前在一個物理所Lab工作,
: 有很多的實驗數據和分析產生的文件要儲存,
: 這些檔案被集中管理在server上。
: 問題出在,有些文件會被修改,於是檔名會長得像「主旨_人名_最後修改日期」這樣,
: 另外老師會有離線編輯的需求,也就是沒辦法連到server的時候,
: 他會拿著備份的硬碟工作,之後再傳到server上(這部分是我想的,不是很確定)。
: 另外本Lab有備份方面的問題,目前備份的方法是複製貼上,
: 雖然沒有大問題,但我覺得怪怪的。
: 由於我們資料頗多(幾百G),我覺得應該要有更有效率的管理方式,
: 各位大大能給我甚麼建議嗎?
: 謝謝<(_ _)>
--
Tags:
Linux
All Comments
Related Posts
sr1介面

By Lucy
at 2012-08-28T23:44
at 2012-08-28T23:44
Re: 第8次星系主題:TDD with python unittest for embedded C

By Anonymous
at 2012-08-28T17:48
at 2012-08-28T17:48
/home檔案系統的繼承

By Oliver
at 2012-08-28T17:00
at 2012-08-28T17:00
KDE 今天晚上聚會喔~~

By Vanessa
at 2012-08-28T13:02
at 2012-08-28T13:02
Linux mint使用code::block字體

By Wallis
at 2012-08-28T11:19
at 2012-08-28T11:19