2013-04-30 58 views
22

我將自己的點文件存儲在github中,由於沒有自動化,因此很多痛苦。我必須自己更新它。如何使用Github管理點文件?

有沒有辦法可以自動安裝/更新/同步點文件?我的意思是在一臺全新的服務器上,我下載了dotfiles並執行了一個install腳本來將dotfiles複製到本地。經過一段時間後,我可以執行updateToRemote腳本將本地更改推送到遠程回購站,並且在另一臺服務器上,我可以執行updateToLocal腳本將遠程更改提取到本地。

就是這樣的。

回答

26

有關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存儲庫。

+0

是否有任何已知的解決方案,一旦進行更改就自動同步點文件,就像點文件是雲中的共享文件一樣?每次更換設備時,我都不喜歡進行更改。我可以實現我自己的,但只有在沒有這樣的情況下才能實現。 – ElefEnt 2016-01-26 19:09:44

+0

@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

+0

瞭解關於該主題的其他討論。Atlassian有關於[使用git工作樹而不是符號鏈接]的教程(https:// developer .atlassian.com /博客/ 2016/02 /最好的路到店,點文件 - 混帳裸回購/)。 – Jaime 2017-10-15 15:26:01

1

我使用git倉庫(github上)和bash腳本創建符號鏈接(然後點文件夾作爲一個git倉庫管理)。但是現在我發現了這個似乎更強大的工具。檢查出來: https://github.com/shanx/python-dotfiles

0

您使用git push/pull命令(GitHub作爲「中央」存儲庫)更新/同步dotfiles。 當談到符號化點文件時,我寫了一篇關於它的文章。檢查出來:manage your dotfiles with ease

0

主要想法是有一個分離的目錄(通常稱爲.dotfiles)與所有真正的點文件,你想在git中跟蹤並在主目錄中有符號鏈接。

已經有很多關於這個方法所做的工作,所以我會建議你檢查DFM(點文件管理器):

  • 下面是使用DFM我點文件的選擇(你可以把它作爲一個例子):vicente's dotfiles
  • Github上正式儲存DFM site
5

以上的答案是優秀的,是我究竟會怎麼做對「真正的操作系統」。

我在一個着名的商業操作系統上使用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會有「怪癖」,但至今沒有任何問題。

0

我發現一個有趣的方式來使用普通的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 

優勢

  • 沒有額外的工具
  • 沒有符號連接

更多的相關信息

3

嗯,這是三年之後,沒有人想出了什麼偉大,所以我花了刺這個問題。它是平臺不可知的,並且shell不可知,除了可用的bourne兼容shell(bash,zsh,ksh等)之外沒有其他依賴。它在Mac,Linux操作系統,&窗口:

dotsys

它會自動同步與github上與多臺計算機更改您的點文件,與許多其他功能一起。