zoukankan      html  css  js  c++  java
  • 使用 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

  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/yychi/p/10648534.html
Copyright © 2011-2022 走看看