1. 程式人生 > 其它 >git-config配置多使用者環境以及 includeIf用法

git-config配置多使用者環境以及 includeIf用法

git-config配置多使用者環境以及 includeIf用法




背景

開發人員經常遇到這樣的問題,公司倉庫和個人倉庫的使用者名稱和郵箱配置是有區別的,為了能夠很好地區分工程上傳到不同的遠端倉庫,我們需要分別處理,保證在不同的工程使用不同的賬戶


介紹

  • Git支援多級配置,分別是system(系統級)global(使用者級)local(專案級)worktree(工作區級)

  • 配置優先順序: worktree > local > global > system

  • 在Linux環境中,分別對應

    • system

      • /etc/gitconfig: 系統級配置檔案;對系統中所有使用者都普遍適用的配置。使用 git config --system讀寫的就是這個檔案。
    • global

      • ~/.gitconfig: 使用者級配置檔案;使用者目錄下的配置檔案只適用於該使用者。使用 git config --global讀寫的就是這個檔案。
    • local

      • $RepoPath/.git/config: 專案級配置檔案;當前專案的 git倉庫目錄中的配置檔案(也就是工作目錄中的 .git/config 檔案),這裡的配置僅僅針對當前專案有效。使用 git config --local
        或 省略 local引數,讀寫的就是這個檔案。
    • worktree: 工作區級配置;此配置僅僅針對當前工作區有效。使用 git config --worktree進行配置。

      note :

      • 每一個級別的配置都會覆蓋上層的相同配置,所以 .git/config 裡的配置會覆蓋 /etc/gitconfig 中的同名變數。
      • $RepoPath為某倉庫的本地路徑
  • 在 Windows 系統上

    • Git 會找尋使用者主目錄下的 .gitconfig 檔案。主目錄即 $HOME變數指定的目錄,一般都是 C:\Documents and Settings\$USER。此外,Git 還會嘗試找尋 /etc/gitconfig
      檔案,只不過看當初 Git 裝在什麼目錄,就以此作為根目錄來定位。

配置

  1. 常規用法

    • 全域性配置

      • 方法一: 在~/.gitconfig檔案中新增使用者名稱郵箱

      • 方法二: 配置全域性的使用者名稱郵箱

        git config --global user.email "[email protected]"
        git config --global user.name "Your Name"
        
    • 專案倉庫配置

      • 方法一: 在$RepoPath/.git/config檔案中新增使用者名稱郵箱

      • 方法二: 配置專案的使用者名稱郵箱

        # 進入 $RepoPath目錄,並執行
        git config --local user.email "[email protected]"
        git config --local user.name "Your Name"
        
  2. includeIf用法:

    可以在git的配置檔案中使用 includeincludeIf 關鍵字來包含其它配置檔案,git在解析配置檔案時,會將被包含的配置檔案的內容內聯到 包含指令 所在的位置;所以,被包含的配置檔案的配置項會覆蓋包含指令之前的配置項,包含指令之後的配置項會覆蓋被包含的配置檔案的配置項,即,優先順序是:包含指令後面的配置項 > 被包含的配置檔案的配置項 > 包含指令之前的配置項

    • 示例

      [include]
          path = /path/to/foo.inc ; # 絕對路徑
          path = foo.inc ;    # 相對路徑,相對於當前的配置檔案
          path = ~/foo.inc ;  # 相對使用者目錄 `$HOME` 路徑
      
    • gitdirgitdir/i

      # 當倉庫所在目錄包含gitdir之後的路徑才會使用.inc檔案
      [includeIf "gitdir:/path/to/foo/.git"]
          path = /path/to/foo.inc
      
      # 所有倉庫目錄在gitdir之後的路徑下的,都會使用.inc檔案
      [includeIf "gitdir:/path/to/group/"]
          path = /path/to/foo.inc
      
      # 路徑描述也可以用定義過的環境變數代替 $HOME/to/group
      [includeIf "gitdir:~/to/group/"]
          path = /path/to/foo.inc
      
    • onbranch

      # 包括只有當我們是在一個工作樹,其中 foo-branch 目前已核實
      [includeIf "onbranch:foo-branch"]
          path = foo.inc
      

    note:

    • 在2017年,git新發布的版本2.13.0包含了一個新的功能includeIf配置,可以把匹配的路徑使用對應的配置使用者名稱和郵箱;
    • "條件型別:匹配模式"includeIf 的條件;只有當條件成立時,才會包含 path 選項指定的配置檔案;
    • 條件型別 和 匹配模式: 分隔;
    • 條件型別 共有以下幾種 gitdirgitdir/ionbranch;
      • gitdirgitdir/i: 路徑匹配模式,表示 如果 當前 git倉庫的 .git 目錄的位置 符合 路徑匹配模式, 就載入對應的配置檔案;(gitdir/i表示 匹配模式忽略大小寫)
      • .git 目錄的位置可能是 git 自動找到的 或是 $GIT_DIR 環境變數的值;
      • onbranch: 分支匹配模式, 表示 如果我們位於當前檢出的分支名稱 與 分支匹配模式 匹配的工作樹中,就載入對應的配置檔案;
    • 匹配模式 採用標準的 glob 萬用字元 再加上 表示任務路徑的萬用字元 **;
    • path 用於指定配置檔案的路徑;
    • 可以通過寫多個 path 來表示包含多個配置檔案;

栗子

  1. 指定工程的使用者配置

    # 配置demo專案
    [includeIf "gitdir/i:~/workspace/private/demo/.git"]
        path = ~/.gitconfig_self
    
  2. 指定目錄的使用者配置

    # 配置public目錄
    [includeIf "gitdir/i:~/workspace/public/"]
        path = ~/.gitconfig_work
    
    # 配置private目錄
    [includeIf "gitdir/i:~/workspace/private/"]
        path = ~/.gitconfig_self
    
  3. 指定分支的使用者配置

    # 配置 test-branch分支
    [includeIf "onbranch:test-branch"]
        path = ~/.gitconfig_self
    



Referense