如何根据远程仓库的URL自动设置git:username

时间:2012-05-30 19:07:20

标签: git templates git-clone git-config

我的本​​地计算机上有一些git存储库是业余爱好项目(托管在GitHub上),还有一些与工作相关(在其他地方托管)。因为我做错了(不要问,这是无关紧要的)我经常要rm -rf并重新克隆一个repo,它也会清除它的.git/config文件。

我想在我的~/.gitconfig中添加一些内容,这些内容会为我的工作项目设置user.email,而不是我的业余爱好项目。 (请记住,我不能使用.git/config,因为它会定期消失。)这可以基于项目名称,或者基于我正在克隆的远程仓库的URL。

作为一个单独但相关的问题,我希望能够指定应用于所有我的存储库的全局预提交挂钩,而不是必须记住修改.git/hooks/pre-commit每次我克隆一个回购。 (我知道git clone --template。)

我想我可以写一个别名为git的Bash脚本,只要它注意到我做了git clone就可以完成所有这些设置。那是唯一的答案吗?

3 个答案:

答案 0 :(得分:0)

如果您使用任何更改目录时更改提示的Bash扩展名,您可能需要挂钩以设置GIT_AUTHOR_NAMEGIT_COMMITTER_NAME以及相关的电子邮件环境变量,具体取决于哪些您所在的存储库。

在.bashrc中,您可以执行以下操作:

__git_ps1() {
   BRANCH=`git branch 2>/dev/null`
   if [ "$?" == "0" ]; then
      # Do something with your prompt
      if [[ `git remote -v` =~ $WORK_URL_REGEX ]]; then
         export GIT_AUTHOR_EMAIL="me.working@work.com"
      else
         export GIT_AUTHOR_EMAIL="me.playing@home.org"
      fi
   endif
}

这显然非常粗糙(我也没有测试过),但应该给你一个很好的起点。

答案 1 :(得分:0)

不知道为什么你会/有/重新离开..

git reset --hard && git clean -xdf

足够好,会给你一个干净的工作目录。这将保留您的配置更改。

如果您的引用很乱,可以使用

清理远程分支
git remote prune

换句话说,我/我/问你为什么“做错了”:)

答案 2 :(得分:0)

如果是我,我可能会使用脚本将原始rm -rf调用包装起来,将要保存的内容复制到某个临时位置,删除所有内容,克隆存储库,然后将内容复制回来