如何使用 git 備份多個目錄中的文件?
下面的範例被簡化以顯示問題的核心,而不是問題本身(我的文件樹比這更複雜)。
假設我有兩個要備份的文件;一進一
~/somedir/otherdir
進~/otherdir/somedir/
。我想從一個 git 儲存庫中的兩個目錄備份文件。我怎樣才能做到這一點?軟連結只攜帶有關文件儲存位置的資訊,而不是實際文件,而硬連結對我來說有些陌生。這是應該使用硬連結的情況嗎?澄清:我想使用
git
有四個原因:我想儲存作為文本文件的點文件/腳本/配置並隨著時間的推移跟踪更改,我知道 git,我有一個可以用來儲存它們的私有 git 儲存庫,以及我希望能夠在多台 PC 之間共享這些文件。
如果您不介意移動文件…
您可以通過將文件移動到 git 儲存庫並將它們符號連結到它們的舊位置來做到這一點;你最終會得到
~/gitrepo/somedir/otherdir/file1
從~/somedir/otherdir/file1
~/gitrepo/otherdir/somedir/file2
從~/otherdir/somedir/file2
- 從
~/somedir/otherdir/file1
到的符號連結~/gitrepo/somedir/otherdir/file1
- 從
~/otherdir/somedir/file2
到的符號連結~/gitrepo/otherdir/somedir/file2
然後,您可以安全地送出 git 儲存庫中的文件,並使用 git 操作它們,使用舊文件路徑的任何內容都將看到 git 工作區中的目前內容。以相反的方式連結文件或使用硬連結將是危險的,因為任何重寫文件的 git 操作(更改分支,恢復到以前的版本……)都會破壞連結。(希望這可以解釋為什麼硬連結不是真正可行的解決方案。)
在這種情況下,您必須小心那些完全重寫文件、斷開連結的程序;許多文本編輯器都會這樣做,諸如
sed -i
etc 之類的工具也是如此。更安全的方法是將整個文件夾移動到 git 儲存庫中,並對目錄進行符號連結。如果要保留文件…
另一種可能性是在你的主目錄中創建一個 git 儲存庫,告訴 git 忽略所有內容,然後強制添加你想要跟踪的文件:
cd git init echo '*' > .gitignore git add -f .gitignore git commit -m "Initialise repository and ignore everything" git add -f somedir/otherdir/file1 git commit -m "Add file1" git add -f otherdir/somedir/file2 git commit -m "Add file2"
完成此操作後,您將能夠輕鬆跟踪對明確添加的文件的更改,但 git 不會考慮新文件。有了這個設置,在你的主目錄的子目錄中擁有其他 git 儲存庫也應該是安全的,但我還沒有詳細檢查……