当您在某个Git目录下工作时,如何获得某个Git存储库中的Git存储库名称?有Git命令吗?
# I did check out bar repository and working in somewhere
# under bar directory at this moment such as below.
$ git clone git://github.com/foo/bar.git
$ cd bar/baz/qux/quux/corge/grault # and I am working in here!
$ git xxx # <- ???
bar
不幸的是,Git似乎没有内置这样的命令。但是您可以自己使用Git别名和一些shell魔法轻松地添加它。
正如这个答案所指出的,你可以使用git rev-parse——show- topllevel来显示当前git文件夹的根目录。
如果您想经常使用它,将其定义为别名可能更方便。为此,使用git配置别名。根”!Echo "$(git rev-parse——show-toplevel)"'。在此之后,您可以使用git root查看当前所在存储库的根文件夹。
如果您想使用根以外的其他子命令名称,只需替换alias的第二部分。在上面的命令中输入你想要的任何东西。
关于Git中别名的详细信息,请参见Git配置手册页。
下面是一个bash函数,它将打印存储库名称(如果它已经正确设置):
__get_reponame ()
{
local gitdir=$(git rev-parse --git-dir)
if [ $(cat ${gitdir}/description) != "Unnamed repository; edit this file 'description' to name the repository." ]; then
cat ${gitdir}/description
else
echo "Unnamed repository!"
fi
}
解释:
local gitdir=$(git rev-parse --git-dir)
这将执行git rev-parse——git-dir,打印当前存储库的.git目录的完整路径。它将路径存储在$gitdir中。
if [ $(cat ${gitdir}/description) != "..." ]; then
这将执行cat ${gitdir}/description,打印当前存储库的.git/description的内容。如果您正确地命名了存储库,它将打印一个名称。否则,它将打印未命名的存储库;编辑这个文件'description'来命名存储库。
cat ${gitdir}/description
如果正确命名了repo,则打印内容。
else
否则……
echo "Unnamed repository!"
告诉用户回购是未命名的。
这个脚本中实现了类似的功能。
您可以将项目名称存储在git对象数据库中的对象中,并在带注释的标记中引用它。
例如,存储库名称“GnuMake”就是标记名称“nameRepo”。ssh -F指定ssh配置文件khnSrv_al注册为远端主机
命令:在git数据库中创建并放置一个对象,在带注释的标记中获取并保存到放置对象的链接。
git -C /path/dir_git -c user.email=you@example.com -c user.name=ВашеИмя tag -a nameRepo -m 'Имя репозитория' $(echo 'GnuMake'|git -C /path/dir_git hash-object -w --stdin)
al@rznCad:~$ git -C ~/experiments/git -c user.email=you@example.com -c user.name=ВашеИмя tag -a nameRepo -m 'Имя репозитория' $(echo 'GnuMake'|git -C ~/experiments/git hash-object -w --stdin)
al@rznCad:~$ ssh -F /ubData/docs/PktDstSSH/master_config khnSrv_al "git -C /home/al/newRepos/GNU_Make -c user.email=you@example.com -c user.name=ВашеИмя tag -a nameRepo -m 'Имя репозитория' \$(echo 'GnuMake'|git -C /home/al/newRepos/GNU_Make hash-object -w --stdin)"
命令:使用名为"nameRepo"的标记从git数据库对象中提取存储库名称
git -C /path/dir_git cat-file blob nameRepo
al@rznCad:~$ git -C ~/experiments/git cat-file blob nameRepo
=>GnuMake
al@rznCad:~$ ssh -F /ubData/docs/PktDstSSH/master_config khnSrv_al "git -C /home/al/newRepos/GNU_Make cat-file blob nameRepo"
=>GnuMake
al@rznCad:~$ ssh -F /ubData/docs/PktDstSSH/master_config khnSrv_al git -C /home/al/newRepos/GNU_Make show nameRepo
tag nameRepo
Tagger: ВашеИмя <you@example.com>
Date: Wed Jan 25 09:01:18 2023 +0200
Имя репозитория
GnuMake
注意,在存储库中不需要有其他任何东西,您可以在任何时候创建一个存储库名称