在我的mac根目錄下,我有我的.bashrc,.aliases,.zshrc ...,然後在另一個文件夾中,我有一個同名點文件的git存儲庫。當我更新根目錄時,我也更新了git回購(手動)。有什麼方法可以將根文件夾中實際實現的點文件「鏈接」到git repo,因此我只需處理一個更改?Git跟蹤點文件(例如:.zshrc)
回答
你實際上可以用ln
'鏈接'這些文件。您可以使用符號鏈接(-s
)或硬鏈接。如果您使用UNIX(如系統),您應該瞭解鏈接。
符號鏈接是包含路徑(相對或絕對)的基本特殊文件,並且被系統視爲它們是該路徑上的文件(這意味着符號鏈接可能會被破壞)。
硬鏈接(由ln
創建而沒有-s
標誌)僅限於單個文件系統,硬鏈接只是與原始文件相同字節塊的名稱。硬鏈接與原始文件無法區分。實際上,文件只是硬鏈接(= inode的名稱),其計數爲1.(ls -l
列表中的第二列顯示了給定文件在文件系統上存在的硬連接數(名稱)數。)
我也把我的dotfiles放入回購。在我的回購中。我在一個名爲的目錄中有點文件,我的回購還包含一個腳本,它將dotfiles
的鏈接到我的主目錄。
該腳本如下:
#!/bin/bash
shopt -s dotglob #make globbing catch dotfiles too
#Use -f (force) to overwrite targets
for file in payload/*; do ln -s .${PWD/$HOME/}/$file $HOME/; done #use string substitution
編輯 我發現一個簡單的方法來獲得在鏈接的相對路徑是使用-r
選項ln
:
for file in payload/*; do ln -s -r $file $HOME/; done
也可以使用ln
的第三種形式(請參閱man ln
)一次創建多個鏈接:
ln -s -r payload/* $HOME/
對於硬鏈接的版本,你可以這樣做:
#!/bin/bash
shopt -s dotglob #make globbing catch dotfiles too
ln payload/* $HOME/
(此硬鏈接的版本將不會與移動破碎和重命名,但你的回購必須是在同一文件系統)
(所有這些假定您只有payload/
中的文件(不是目錄),並且您的鏈接應該與其目標具有相同的名稱。)
還有更復雜的程序s更加強大的方式。
symbolic link怎麼樣?
只要刪除該文件在你的根,並重新創建它們作爲
ln -s /physical/path/to/file /symbolic/link/path
例如,如果你有文件/git/.aliases,ln -s /git/.aliases /root/.aliases
將創建的文件夾root
稱爲.aliases
的符號鏈接。從這一點開始,無論您修改哪個文件(/git
或/root
),都會修改另一個文件。
查看this link瞭解符號鏈接和Mac的更多詳細信息。
請原諒我的隨機路徑,我不是Mac用戶。
我通常用符號鏈接對於這一點,如:
mkdir ~/.dotfiles
mv ~/.zshrc ~/.dotfiles
ln -s ~/.dotfiles/.zshrc ~/.zshrc
cd ~/.dotfiles ; git init ; ...etc...
..所以說,實際上被打開的文件是在〜/ .dotfiles目錄版本控制下的一個。
另一種選擇是使用特定應用程序 「包括」 的特點,如:
- 把你的 「標準」 配置
~/.dotfiles/.zshrc
源,從
~/.zshrc
文件:[ -e ~/.dotfiles/.zshrc ] && . ~/.dotfiles/.zshrc
- 1. GIT沒有跟蹤文件
- 2. git clean只跟蹤文件
- 3. Git沒有跟蹤文件
- 4. 什麼是GIT中的跟蹤文件和未跟蹤文件?
- 5. 如何使用Git跟蹤.txt文件?
- 6. 如何使用Git來跟蹤用戶的點文件?
- 7. Git - 跟蹤已經跟蹤的文件的移動
- 8. Git的狀態報告的跟蹤文件未經跟蹤
- 9. 將跟蹤的文件移動到未跟蹤的git
- 10. git status - 不顯示未跟蹤文件
- 11. git忽略正在跟蹤的文件
- 12. 對composer.lock文件的Git跟蹤
- 13. Git:忽略跟蹤的文件
- 14. 無法停止Git跟蹤.gitignore'd文件
- 15. 刪除由Git跟蹤的文件
- 16. Git。更新未跟蹤文件
- 17. Git忽略未跟蹤文件
- 18. Git不跟蹤.gitignore異常文件夾
- 19. git - 跟蹤Linux內核.config文件
- 20. Git LFS跟蹤文件夾遞歸地
- 21. git跟蹤忽略文件夾
- 22. git跟蹤一個文件的變化
- 23. Git和Xcode的 - 未跟蹤文件
- 24. Git合併 - 不提交跟蹤文件
- 25. Git commit -a「未跟蹤文件」?
- 26. 交互合併文件跟蹤與git和未跟蹤本地文件
- 27. Git:從原點添加未跟蹤文件
- 28. 如何使用Git跟蹤目錄但不跟蹤他們的文件?
- 29. 跟蹤文件
- 30. Git跟蹤未追蹤的文件,但未添加到提交
我會使用硬鏈接;如果沒有別的,它允許你(重新)移動git倉庫而不刪除實際的文件。 – chepner 2014-09-30 15:06:13
@chepner:好點。我沒有想到這一點。我已經用硬鏈接版本和硬鏈接的解釋修改了我的答案。 (因爲這個問題基本上都是關於鏈接的)。 – PSkocik 2014-09-30 15:40:44
不會破壞硬鏈接? (https://codingkilledthecat.wordpress.com/2012/08/08/git-dotfiles-and-hardlinks/,http://stackoverflow.com/questions/3729278/git-and-hard-links#3731139) – 2017-03-24 17:33:55