git是否有内置命令来显示当前远程项目的名称?现在我正在使用这个:
git remote -v | head -n1 | awk '{print $2}' | sed 's/.*\///' | sed 's/\.git//'
......但似乎会有一个内置的等价物.
我正在寻找相同的信息,以便自定义我的shell提示符,所以我决定尝试一下,最后输出这个命令,只输出项目的名称:
$ git config --local remote.origin.url|sed -n 's#.*/\([^.]*\)\.git#\1#p'
如果您的远程源URL是SSH,基于DNS或基于IP的HTTPS,它应该适用于任何情况.
基于SSH
dns:ssh://git@github.com:user/project.git
ip:ssh://git@192.30.252.130:user/project.git
基于HTTPS
dns:https://github.com/user/project.git
ip:https://192.30.252.130/user/project.git
如果你没有远程配置,只有本地资源库和您的顶层文件夹是项目,你可以使用git REV-解析和基本名称使用Git树内(不可靠的解决方案)的名称.它将输出项目名称:
TOP=$(git rev-parse --show-toplevel); echo ${TOP##*/}
注意:GH不允许您直接在HTTPS上使用IP进行克隆,因为证书链验证.这只是为了说明用例.
看起来您的脚本正在拉动远程URL的最后一部分并将其用作项目名称.这在使用单个远程站点(例如http://bitbucket.org)时有效,但您的系统不能在该存储库的所有用户中普遍使用.
用户通常都有不同的远程存储库,事实上在许多项目中你将拥有多个远程存储库.在获取和合并时,Git并不关心存储库的来源.合并算法甚至会接受没有共同祖先的分支.
唯一真正的解决方案是在包含项目名称的每个存储库的根目录中创建一个文本文件.无论他们如何设置遥控器,此解决方案都适用于所有用户.
对于远程文件夹名称,它会更好
git remote -v | head -n1 | awk '{print $2}' | sed -e 's,.*:\(.*/\)\?,,' -e 's/\.git$//'
因为它可能是git@something.com:repo_name-没有任何斜杠.