- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们公司使用了许多定制的开源项目。每当我贡献上游分支时,我都会更改为使用我的个人电子邮件/姓名。有没有办法让每个分支都有 gitconfig?
比如我想要的是
[remote 'gerrit']
name = 'Personal Name'
[branch 'origin']
name = 'Name in company'
最佳答案
使用 Git 2.23(Q3 2019),无需 post-checkout hook,可以正式使用 git config
conditional includes ,没有脚本!
条件包含机制学会了选择基于HEAD 当前所在的分支。
参见 commit 07b2c0e (2019 年 6 月 5 日)作者:Denton Liu ( Denton-L
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit 3707986 ,2019 年 7 月 9 日)
config
: learn the "onbranch:
"includeIf
condition
Currently, if a user wishes to have individual settings per branch, they are required to manually keep track of the settings in their head and manually set the options on the command-line or change the config at each branch.
Teach config the "
onbranch:
"includeIf
condition so that it canconditionally include configuration files if the branch that is checkedout in the current worktree matches the pattern given.
git config
man page现在包括:
onbranch
:
The data that follows the keyword
onbranch:
is taken to be a pattern with standard globbing wildcards and two additional ones,**/
and/**
, that can match multiple path components.If we are in a worktree where the name of the branch that is currently checked out matches the pattern, the include condition is met.
If the pattern ends with
/
,**
will be automatically added.
For example, the patternfoo/
becomesfoo/**
.In other words, it matches all branches that begin with
foo/
. This is useful if your branches are organized hierarchically and you would like to apply a configuration to all the branches in that hierarchy.
所以在你的情况下:
[includeIf "onbranch:gerrit"]
path=gerrit
并且在 .git/gerrit
文件:
[remote 'gerrit']
name = 'Personal Name'
例子:
vonc@vonvb:~/gits/src/git$ git version
git version 2.23.0.b4
vonc@vonvb:~/gits/src/git$ git config includeIf.onbranch:next.path user1
vonc@vonvb:~/gits/src/git$ git config includeIf.onbranch:pu.path user2
vonc@vonvb:~/gits/src/git$ git config --local -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
...
includeif.onbranch:next.path=user1
includeif.onbranch:pu.path=user2
设置每个分支的配置文件:
vonc@vonvb:~/gits/src/git$ git config --file=.git/user1 user.name user1
vonc@vonvb:~/gits/src/git$ git config --file=.git/user1 user.email user1@email.com
vonc@vonvb:~/gits/src/git$ more .git/user1
[user]
name = user1
email = user1@email.com
vonc@vonvb:~/gits/src/git$ git config --file=.git/user2 user.name user2
vonc@vonvb:~/gits/src/git$ git config --file=.git/user2 user.email user2@email.com
vonc@vonvb:~/gits/src/git$ more .git/user2
[user]
name = user2
email = user2@email.com
检查它是否正常工作!
vonc@vonvb:~/gits/src/git$ git config user.name
VonC
vonc@vonvb:~/gits/src/git$ git checkout next
Branch 'next' set up to track remote branch 'next' from 'origin'.
Switched to a new branch 'next'
vonc@vonvb:~/gits/src/git$ git config user.name
user1
vonc@vonvb:~/gits/src/git$ git checkout pu
Branch 'pu' set up to track remote branch 'pu' from 'origin'.
Switched to a new branch 'pu'
vonc@vonvb:~/gits/src/git$ git config user.name
user2
vonc@vonvb:~/gits/src/git$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
vonc@vonvb:~/gits/src/git$ git config user.name
VonC
来自 master
至 next
至 pu
分支机构:三个不同user.name
! 每个分支一个。
没有钩子(Hook)。没有脚本。
如 Git 2.30(2021 年第一季度)所示,请确保使用 Git 2.24+,否则您可能会收到一些奇怪的错误消息:
参见 commit f1beaae (2020 年 11 月 19 日)Johannes Schindelin ( dscho
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit 1242501 ,2020 年 11 月 30 日)
t1309
: use a neutral branch name in theonbranch
test casesSigned-off-by: Johannes Schindelin
The
onbranch
test cases touched by this patch do not actually try to include any other config. Their purpose is to avoid regressing on two bugs in theinclude.onbranch:<name>.path
code that we fixed in the past, bugs that are actually unrelated to any concrete branch name.The first bug was fixed in 85fe0e800ca ("
config
: work around bug with includeif:onbranch and early config", 2019-07-31, Git v2.23.0-rc1 -- merge).
Essentially, when reading early config, there would be a catch-22 trying to access the refs, and therefore we simply cannot evaluate the condition at that point. The test case ensures that we avoid emitting this bogus message:BUG: refs.c:1851: attempting to get main_ref_store outside of repository
The second test case concerns the non-Git scenario, where we simply do not have a current branch to begin with (because we don't have a repository in the first place), and the test case was introduced in 22932d9169f ("
config
: stop checking whetherthe_repository
isNULL
", 2019-08-06, Git v2.24.0-rc0 -- merge listed in batch #2) to ensure that we don't cause a segmentation fault should the code still incorrectly try to look at any ref.In short, neither of these two test cases will ever look at a current branch name, even in case of regressions. Therefore, the actual branch name does not matter at all. We can therefore easily avoid racially-charged branch names here, and that's what this patch does.
关于git - 每个分支使用 gitconfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49827353/
我将我的项目托管在 TFS-GIT 服务器中。我在 TFS 上遇到 pull 请求 merge 问题。一种选择是更新 TFS 服务器本身上的 git 配置以“merge --no--ff”,因为时间紧
一定时间后git报错以识别自己,将gitconfig文件设置为 [user] name = = email = = 最佳答案 原来是 Atom 编辑器重置了我的 git 配置。 Ato
我用 git clone 克隆了一个存储库它依赖于另一个私有(private)仓库。在当前 repo 中,我尝试 go get该依赖项( go get -u ./... )它给我一个错误: fatal
我有我的点文件设置,我确实有一个 .gitconfig。问题出在我的 OSX 机器上,希望助手是 osxkeychain,但对于我的 linux 机器,我想要 cache --timeout 3600
我正在尝试设置我的 git 配置,以便我可以使用工作环境和个人环境。 这是我的 ~.gitconfig 文件的内容(碰巧 work 和 private 在 github 上): [url "git@
我编辑了我的 .gitconfig 文件以添加对 LabView 的支持,看起来我做了一些 Git 不完全喜欢的事情。问题是它 (Git) 没有告诉我它不喜欢什么。我做错了什么? 错误消息也没有太大帮
如果我添加 [format] pretty = format:%h %ad %s 到我的 ~/.gitconfig 并输入 git log 我得到: 36f6ac2 2016-05-22 08:5
我在我的 .gitconfig 中定义了以下别名: [alias] teamcity = ! tc tc 是我在 .bashrc 文件中定义的 shell 函数。出于某种原因,我收到以下错误:
我们公司使用了许多定制的开源项目。每当我贡献上游分支时,我都会更改为使用我的个人电子邮件/姓名。有没有办法让每个分支都有 gitconfig? 比如我想要的是 [remote 'gerrit'] na
我想使用全局 gitconfig 文件设置我的 git (TortoiseGIT),这样当我克隆存储库时默认的远程名称不是“origin”,而是我定义的一些其他文本(例如“foo”)。 这可能吗?有哪
Git 似乎忽略了 ~/.gitconfig $ git config --global core.filemode false $ git config -l core.filemode=false
我使用两种不同的 git 电子邮件,一种用于工作,一种用于公共(public)项目。最初我认为我可以在我所有公共(public)存储库所在的文件夹中使用不同的电子邮件创建一个单独的 .gitconfi
我正在编辑我的 ~/.gitconfig 并注意到有混合的制表符/空格。通常混合使用制表符/空格是不好的,但是当我试图查找文档以了解允许的语法要求时,我找不到答案。 ~/.gitconfig 语法是否
在我个人的 Ubuntu 机器中,我有一个目录,其中包含我所有的专业项目。我想为他们使用不同的 git 配置(主要是不同的用户名和电子邮件)。这似乎以前有效,但现在不再有效了。 ~/.gitconfi
我需要一个脚本来确保 .gitconfig 文件中包含以下内容: [url "git@:"] insteadOf = https:/// insteadOf = https:///
我的 .gitconfig 文件中有这个别名: setmeld = config --global diff.external git-meld nomeld = config --globa
我在 Windows 7 下运行这个命令: git status 现在我收到这个错误: fatal: unable to access 'H:\/.config/git/config 我现在与网络断开
基本上我想做的是有一个方便的工具,我可以在其中说: git 打开 这只会在您的浏览器中打开当前的 github 存储库。如果我能得到名称,我可以使用 https://github.com/{user
我有以下.gitconfig: [user] name = name email = email@email.com custom_field = AAA 使用 git config 可以轻松获取姓名
我一直在使用这个别名: aliases = !git config --get-regexp 'alias.*' | colrm 1 6 | sed 's/[ ]/ = /' 显示配置文件中的所有别名
我是一名优秀的程序员,十分优秀!