在 git 配置文件中定义变量?

问题描述 投票:0回答:2

我有一组 git 别名,我在个人生活和专业职位上都使用它们。由于 git 使用中的长期约定,我已将

master
硬编码为许多这些别名中的默认“主”分支。

然而,我恰好在一家机构工作,那里的惯例是使用

main
作为主要分支。这意味着当我尝试使用它们时,我的很多别名都会被破坏,因为我已经硬编码了一个名为
master
的分支的假设,以及随之而来的用法。

我不知道是否可以在别名定义中使用一个变量,而不是在别名文件中更改

master
的实例,并针对不同情况维护该别名文件的单独版本,我可以在我的
.gitconfig 中设置一个变量
。比如:

$ cat .gitconfig

...
[variables]
  DEFAULT_BRANCH = main

[include]
  path = myaliases.git

$ cat myaliases.git

bclean = "!f() { git branch --merged ${1-DEFAULT_BRANCH} | grep -v " ${1-DEFAULT_BRANCH}$" | xargs -r git branch -d; }; f"

而不是

bclean = "!f() { git branch --merged ${1-master} | grep -v " ${1-master}$" | xargs -r git branch -d; }; f"
git alias git-config
2个回答
0
投票

您不能直接使用 Git 别名来执行此操作(如 Git 扩展的部分)。您可以使用 shell 别名来完成此操作(如 shell 扩展的部分,可以通过直接 shell 别名,或通过使用

!
调用 shell 的 Git 别名)。

来自 Kraigolas 的评论建议使用符号名称,对于某些情况也是一个好建议:只需在这些存储库中将

master
作为
main
的符号名称即可。不过,唯一的正常符号名称是
HEAD
,并且符号名称具有某些奇怪之处:例如,过去尝试删除符号名称时会删除其目标。

更直接的是,您可以使用

[include]
指令。对于您希望别名使用
main
的任何存储库,只需包含别名文件的(子)版本,将
master
替换为
main
。当然,这就是您所说的您不想做的事情,但是您编辑这些别名的频率是多少?您可以编写一个小脚本,从您的“主”配置文件(或者我应该将其称为您的“主”文件?)生成备用文件,并在您进行编辑时运行该脚本。请注意,您只需要通过包含来用后面的别名覆盖别名:

[include]
    path = ~/.gitconfig.main

对于处理

~/.gitconfig
中别名的脚本,有多种方法可以解决这个问题。我的偏好是移动与 master 相关的别名并让
~/.gitconfig
包含
~/.gitconfig.master
本身,以便脚本只是:

sed -e s/master/main/ < ~/.gitconfig.master > ~/.gitconfig.main

但是,您可以想象并编写一些运行

git config --global --list
、提取
alias.*
条目等的东西。这变得很困难,因为你必须处理引用。

这是一个愚蠢的例子:

$ grep silly ~/.gitconfig
        silly = rev-parse master
$ cat ~/.gitconfig.main
[alias]
        silly = rev-parse main

在没有

git silly
部分的存储库中运行
include
会运行
git rev-parse master
。在存储库中运行
git silly
with
include
部分运行
git rev-parse main


0
投票

您可以在 .zshrc 文件(或 .bashrc,具体取决于您使用的 shell)中定义变量

# ~/.zshrc
export GIT_DEFAULT_BRANCH="main"

然后在你的 git 配置文件中

# ~/.gitconfig
[alias]
        default = "!git checkout $GIT_DEFAULT_BRANCH"

您必须使用

!
语法才能完成此操作,并且每当您对 .zshrc 中的变量进行更改时,您都需要使用以下命令重新加载 .zshrc 文件:

$ . $HOME/.zshrc
© www.soinside.com 2019 - 2024. All rights reserved.