我將自己的點文件存儲在github中,由於沒有自動化,因此很多痛苦。我必須自己更新它。如何使用Github管理點文件?
有沒有辦法可以自動安裝/更新/同步點文件?我的意思是在一臺全新的服務器上,我下載了dotfiles並執行了一個install
腳本來將dotfiles複製到本地。經過一段時間後,我可以執行updateToRemote
腳本將本地更改推送到遠程回購站,並且在另一臺服務器上,我可以執行updateToLocal
腳本將遠程更改提取到本地。
就是這樣的。
我將自己的點文件存儲在github中,由於沒有自動化,因此很多痛苦。我必須自己更新它。如何使用Github管理點文件?
有沒有辦法可以自動安裝/更新/同步點文件?我的意思是在一臺全新的服務器上,我下載了dotfiles並執行了一個install
腳本來將dotfiles複製到本地。經過一段時間後,我可以執行updateToRemote
腳本將本地更改推送到遠程回購站,並且在另一臺服務器上,我可以執行updateToLocal
腳本將遠程更改提取到本地。
就是這樣的。
有關dotfiles的主要信息來源是dotfiles.github.io
。
它引用像Using Git and Github to Manage Your Dotfiles這樣的博客文章,基於符號鏈接方法。
對於初學者來說,我們將將所有我們點文件成一個文件夾,名爲點文件,像這樣:
/home/smalleycreative/dotfiles/vimrc
。
然後,我們將簡單地從我們的主目錄符號鏈接到它們。
Jaime提及使用特製的別名所以Atlassian的教程 「The best way to store your dotfiles: A bare Git repository」
該技術在於在a 「側」 的文件夾存儲一個Git純倉庫(如
$HOME/.cfg
或$HOME/.myconfig
)該命令是針對該存儲庫運行的,而不是通常的.git/
本地文件夾,這會干擾任何其他Git存儲庫。
我使用git倉庫(github上)和bash腳本創建符號鏈接(然後點文件夾作爲一個git倉庫管理)。但是現在我發現了這個似乎更強大的工具。檢查出來: https://github.com/shanx/python-dotfiles。
您使用git push/pull
命令(GitHub作爲「中央」存儲庫)更新/同步dotfiles。 當談到符號化點文件時,我寫了一篇關於它的文章。檢查出來:manage your dotfiles with ease。
主要想法是有一個分離的目錄(通常稱爲.dotfiles)與所有真正的點文件,你想在git中跟蹤並在主目錄中有符號鏈接。
已經有很多關於這個方法所做的工作,所以我會建議你檢查DFM(點文件管理器):
以上的答案是優秀的,是我究竟會怎麼做對「真正的操作系統」。
我在一個着名的商業操作系統上使用cygwin/msys遇到了一個問題,使用符號鏈接有時可能會出現一些我最喜歡的軟件的「本地」端口問題。
爲了解決這個問題,我嘗試了將文件夾$ HOME直接作爲git存儲庫。在發生一些故障後,我發現密鑰全部在.gitignore文件中。
所以我一直在使用的設置是通過將$ HOME作爲一個存儲庫,創建一個.gitignore文件,並逐個添加所需的「dotfiles」文件來創建的。爲了獲得自動備份,我還在備份驅動器(z:在這種情況下)上添加了一個存儲庫作爲上游。如果您的文件夾已備份,添加上游文件是不必要的複雜操作。因此,假設「/z/Backups/Dotfiles.git」是一個預先存在的「裸」庫,在MSYS殼,步驟設置事情是:
$ cd $HOME
$ git init
Initialised empty Git repository in $HOME
$ git add .bashrc .emacs .gitconfig # for example
$ git commit -m "Initial import of dotfiles"
[master (root-commit) xxxxxxxx] Initial import for dotfiles
3 files changed, xxx instertions(+)
create mode 100644 .bashrc
create mode 100644 .emacs
create mode 100644 .gitconfig
# The following two lines just add an "upstream" purely for backup purposes.
$ git remote add origin /z/Backups/Dotfiles.git
$ git push -u origin master
<<snip>>
接下來,我把下列$ HOME /.gitignore:
# First exclude everything.
*
# then re-include all "dotfiles"
!/.*
# then a bunch of specific excludes as they are more-or-less "cache" data rather than configuration.
/.bash_history
/.dbus-keyrings/
/.emacs.d/
/.gimp-2.8/
/.git/
/.gitk
/.idlerc/
/.lesshst
/.saves/
/.thumbnails/
最後下列命令(道歉我沒有捕獲從這些輸出)的.gitignore本身添加到存儲庫:
$ cd $HOME
$ git add .gitignore
$ git commit -m "Added some rules so git status on the dotfiles is useful."
$ git push
現在,任何「正常」的文件,你添加到您的家庭目錄被忽視b y中的點文件回購,但任何新的點文件中git的狀態例如爲:
$ cd $HOME
$ touch NewFile.txt
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
$ touch .funkychicken
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
.funkychicken
nothing added to commit but untracked files present (use "git add" to track)
到目前爲止,這一直運作良好,即使有一些子目錄是自己的(無關)的Git倉庫露面。有時候,非git subdirs會有「怪癖」,但至今沒有任何問題。
我發現一個有趣的方式來使用普通的git來管理你的點文件,沒有符號鏈接需要。這樣一來,你應該能夠做到推拉通常的方式:
設置
git init --bare $HOME/.myconf
alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME'
config config status.showUntrackedFiles no
在我的〜/ .myconf目錄是一個Git的裸庫。
用法
通常的GIT中的命令然後可以用git的別名,例如使用配置或任何你選擇。
config status
config add .vimrc
config commit -m "Add vimrc"
config push
優勢
更多的相關信息
嗯,這是三年之後,沒有人想出了什麼偉大,所以我花了刺這個問題。它是平臺不可知的,並且shell不可知,除了可用的bourne兼容shell(bash,zsh,ksh等)之外沒有其他依賴。它在Mac,Linux操作系統,&窗口:
它會自動同步與github上與多臺計算機更改您的點文件,與許多其他功能一起。
是否有任何已知的解決方案,一旦進行更改就自動同步點文件,就像點文件是雲中的共享文件一樣?每次更換設備時,我都不喜歡進行更改。我可以實現我自己的,但只有在沒有這樣的情況下才能實現。 – ElefEnt 2016-01-26 19:09:44
@ElefEnt我知道的大多數解決方案都列在https://dotfiles.github.io/上。其中一些包括一個rsync腳本。您可以通過https://www.reddit.com/r/linux/comments/ctlp3/methods_for_keeping_dotfiles_in_sync_across/ – VonC 2016-01-26 19:11:27
瞭解關於該主題的其他討論。Atlassian有關於[使用git工作樹而不是符號鏈接]的教程(https:// developer .atlassian.com /博客/ 2016/02 /最好的路到店,點文件 - 混帳裸回購/)。 – Jaime 2017-10-15 15:26:01