是否有一个返回当前项目名称的git命令?

bro*_*ock 26 git github

git是否有内置命令来显示当前远程项目的名称?现在我正在使用这个:

git remote -v | head -n1 | awk '{print $2}' | sed 's/.*\///' | sed 's/\.git//'
Run Code Online (Sandbox Code Playgroud)

......但似乎会有一个内置的等价物.

sbz*_*sbz 19

我正在寻找相同的信息,以便自定义我的shell提示符,所以我决定尝试一下,最后输出这个命令,只输出项目的名称:

    $ git config --local remote.origin.url|sed -n 's#.*/\([^.]*\)\.git#\1#p'
Run Code Online (Sandbox Code Playgroud)

如果您的远程源URL是SSH,基于DNS或基于IP的HTTPS,它应该适用于任何情况.

如果你没有远程配置,只有本地资源库和您的顶层文件夹是项目,你可以使用git REV-解析和基本名称使用Git树内(不可靠的解决方案)的名称.它将输出项目名称:

 TOP=$(git rev-parse --show-toplevel); echo ${TOP##*/}
Run Code Online (Sandbox Code Playgroud)

注意:GH不允许您直接在HTTPS上使用IP进行克隆,因为证书链验证.这只是为了说明用例.


Jac*_*ter 13

看起来您的脚本正在拉动远程URL的最后一部分并将其用作项目名称.这在使用单个远程站点(例如http://bitbucket.org)时有效,但您的系统不能在该存储库的所有用户中普遍使用.

用户通常都有不同的远程存储库,事实上在许多项目中你将拥有多个远程存储库.在获取和合并时,Git并不关心存储库的来源.合并算法甚至会接受没有共同祖先的分支.

唯一真正的解决方案是在包含项目名称的每个存储库的根目录中创建一个文本文件.无论他们如何设置遥控器,此解决方案都适用于所有用户.


mug*_*ows 5

对于远程文件夹名称,它会更好

git remote -v | head -n1 | awk '{print $2}' | sed -e 's,.*:\(.*/\)\?,,' -e 's/\.git$//'
Run Code Online (Sandbox Code Playgroud)

因为它可能是git@something.com:repo_name-没有任何斜杠.


jsx*_*sxt 5

该命令git remote -v不能被认为是可靠的,因为您的存储库可以与多个远程存储库一起使用。例如,您的项目是your-project并且您添加了another-project. 在命令之后,您期望看到项目的名称,但您将看到另一个项目的名称:

$ git remote -v | head -n1
ABC https://git.team1.ourcompany.com/another-project.git (fetch)
ABC https://git.team1.ourcompany.com/another-project.git (push)
origin https://git.ourcompany.com/your-project.git (fetch)
origin https://git.ourcompany.com/your-project.git (push)
Run Code Online (Sandbox Code Playgroud)

我建议检查您的存储库的配置,例如:

$ git config --local remote.origin.url
https://git.ourcompany.com/your-project.git
Run Code Online (Sandbox Code Playgroud)

第一种方法更可靠,但不能提供 100% 的保险。