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 "you@example.com"
        git config --global user.name "Your Name"
        
    • 項目倉庫配置

      • 方法一: 在$RepoPath/.git/config文件中添加用戶名郵箱

      • 方法二: 配置項目的用戶名郵箱

        # 進入 $RepoPath目錄,並執行
        git config --local user.email "you@example.com"
        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. 在用戶配置文件 ~/.gitconfig 中添加以下內容

    • 指定工程的用戶配置

      # 配置demo項目
      [includeIf "gitdir/i:~/workspace/private/demo/.git"]
          path = ~/.gitconfig_self
      
    • 指定目錄的用戶配置

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

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

    • 方法一: 直接在$path文件中添加用戶名郵箱,如:

      [user]
          name = librarookie
          email = librarookie@163.com
      
    • 方法二: 用git config -f|--file指定$path文件的用戶名郵箱

      git config -f $path user.name "Your Name"

      git config -f $path user.email "you@example.com"

      git config -f ~/.gitconfig_self user.name librarookie
      git config -f ~/.gitconfig_self user.email librarookie@163.com
      


Ref


免責聲明!

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



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