使用 git 管理你的配置文件


原文發布在我的個人小站:here

對於Linux用戶,在 $HOME 文件夾下,一般都有大量的隱藏文件,形如.conf,.xxxrc等,這些都是程序的配置文件。很多人也許花了一個下午,一天,甚至一個星期,折騰某某程序的配置文件。如果這些輕易丟失了,那就是浪費生命了!所以,如何將這些文件備份,成了很多人必須要問的一個問題。

之前我就一直沒有備份的意識。結果無論是重裝系統,還是轉移機器,都十分煎熬,很多軟件都需要重新配置!這可是一個浩大的工程,費時費力還費心。於是終於想起來應該把苦心經營(大部分都是來自網絡資源,然后自己改改)的配置文件給備份一下。

於是在網上搜索了一下,發現很多人都用 Github 備份自己的配置文件。於是便嘗試如下:

常規操作是將所有需要備份的配置文件單獨拎出來,放到一個專用文件夾MyConf下,該文件夾就作為 git repo 的根目錄。然后將配置文件鏈接到需要原本需要它們的文件夾下。這應該是個比較不錯的解決方案了,但是有的人可能不喜歡創建軟鏈,很強迫症○| ̄|_

於是就有了接下來的方法:主要思想是使用家目錄$HOME下的一個文件夾存儲一個 Git bare repository (關於bare repo 和 普通repo的區別參見What is a bare git repository?)。 然后使用命令別名去添加,刪除,修改配置文件,這樣做的好處是不需要在家目錄下創建 .git/ 目錄,否則會干擾其他子目錄的 git 操作。

1. 新建 bare 倉庫

$HOME文件夾下新建一個文件夾用來存放 git 版本樹。然后初始化為 bare 倉庫。

mkdir ~/.mydotfiles
git init --bare ~/.mydotfiles

2. 創建命令別名

接下來需要創建一個命令別名來進行git的各種操作。直接在家目錄運行git命令肯定是不行的,因為家目錄不是一個 git repo,不包含 .git 文件夾。所以甚至命令別名如下:

alias config='/usr/bin/git --git-dir=$HOME/.mydotfiles/ --work-tree=$HOME'

像這樣定義別名,是一種臨時的方式。想要使它每次都生效,可以將其寫入 .bashrc.zshrc.

echo "alias config='/usr/bin/git --git-dir=$HOME/.mydotfiles/ --work-tree=$HOME'" >> $HOME/.bashrc

如此一來,每次進入shell,都可以使用這個別名。可以敲一個 config status看看效果。

3. 使用.gitignore

現在我們的工作目錄是整個家目錄,如果要把整個目錄全備份的話,那就太可怕了。家目錄一般動輒十幾甚至幾十個Gb,沒有哪家免費服務可以讓你把整個家目錄都備份的。所以我們需要一個 .gitignore 文件。Git 會主動忽略.gitignore中所匹配的那些文件。在家目錄中創建(如果沒有).gitignore 文件:

#! $HOME/.gitignore

#----[ ignore all ] -----
*
#---[ consider list ]---
!*.[Xx]resources
!*.conf
!*config*
!*[a-zA-Z]*rc
!.config/
!.config/*
#---[ ignore list ]---

上面的文件告訴 git 默認忽略所有文件及文件夾,然后反向添加我們想要考慮的那些文件或文件夾。關於該文件的匹配規則參見explain gitignore pattern matching - Stack Overflow. 另外gitignore.io可以根據要求生成不同的 .gitignore 文件。

忽略特定文件

Permanently ignore changes to a file

  1. Add the file in your .gitignore.
  2. Run the following: git rm --cached <file>
  3. Commit the removal of the file and the updated .gitignore to your repo.

來自谷歌搜索,巨嬰家Doc.

4. 常規 git 操作

現在你可以用config add -A來添加所有匹配到的文件。如之前的配置,可以匹配大部分的配置文件。如有遺漏,可以用config add -f <file> 來強制添加。然后可以 config commit -m "initial git" 來提交更改。最后連接 github 遠程倉庫。

首先在github網站新建一個同名倉庫。比如本地倉庫為.mydotfiles, 那就新建一個同名的遠程倉庫。然后

config remote add origin git@github.com:<username>/<repo_name>
config push -u origin master

就可以把本地倉庫推送到遠程,完成同步。

圖片測試:
animal-blurred-background-cat-1443710

Reference


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM