社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

git别名ssh add.gitconfig

Ant • 5 年前 • 798 次点击  

.gitconfig 我创建了这种类型的别名:

[alias]
    something = "!eval `ssh-agent -s` && ssh-add ~/.ssh/id_acub && git config --global user.email <email> && git config --global user.name <user.name>"

此时,跑步 git something 正确显示信息,但无法按预期工作。

如果我在控制台中键入一行:

eval `ssh-agent -s` && ssh-add ~/.ssh/id_acub && git config --global user.email <email> && git config --global user.name <user.name>

然后一切正常。

别名有什么问题?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30771
 
798 次点击  
文章 [ 1 ]  |  最新文章 5 年前
torek
Reply   •   1 楼
torek    5 年前

让我们从一个比 ssh-agent -s :

$ sh -c 'FOO=bar; echo FOO is now $FOO'
FOO is now bar
$ echo FOO is now $FOO
FOO is now

为什么这个不起作用?为什么我的登录外壳是 FOO 变量未设置,当我设置其他shell实例的 变量?

好吧,我希望答案是显而易见的: 我的 壳牌没有 集合。我设置了一些 其他 壳牌公司 变量。我告诉过你 其他 shell把它打印出来,然后就设置好了。然后 其他 shell完成了退出并将控制权还给了我的登录shell,当我告诉我的登录shell打印我的登录shell时 ,未设置。

什么 SSH试剂-S 确实是 打印输出 一些作业。让我们试试看:

$ sh -c 'echo FOO=bar'
FOO=bar
$ echo FOO is now $FOO
FOO is now

当然,这也不管用,因为我只是 打印了一些说明 . 没有人遵守这些指示。

所以,让我们再试一件事:

$ eval `sh -c 'echo FOO=bar'`
$ echo FOO is now $FOO
FOO is now bar

这次,我:

  • 让另一个命令打印一些指令
  • 告诉 我的 外壳到 跟随 那些指示
  • 然后让我的壳打印出我的壳的设置 $FOO

既然我的指令是这样的 改变 某物 在里面 我的贝壳, 现在 我的外壳的foo设置好了。

设计为 ssh-agent 是相同的:它可以做一些工作,然后以各种模式“工作”,包括 -s 艾斯 打印出说明 为了一些贝壳。你需要 eval 要使外壳符合这些说明。

这一切都很好,只要外壳遵循这些说明 你的 壳牌。但是,当您创建Git别名时,Git本身运行一个 新的,不同的 壳牌。这个shell遵循指令,当它完成时,您的shell不会受到影响。

这意味着你不能用git别名做你想做的事情。必须使用将影响 你的 壳,而不是一个会启动一个新的壳,影响它,然后让它终止并蒸发这些影响的壳。

注意一些变化,例如 git config --global 存储在 文件夹 而不是在你的壳里。这些变化 不要 当贝壳消失时蒸发。这是一个关键区别:文件系统状态存储在各个进程之外。如果一切 SSH剂 是以文件系统状态存储的,它 能够 是为了工作,但有些事情 SSH剂 不存储在那里。