我正在编写一个脚本,该脚本作用于本地仓库,其中远程仓库很大,速度很慢,而且许多分支具有不同的历史记录。典型的用户只关心少数这些分支,所以我想通过不从他们不会使用的分支中获取对象来节省带宽。
为此,我希望能够从远程获取引用的名称,而不用获取与这些引用相关联的实际对象。 (一旦我获得了所有这些引用的名称,我计划将该列表呈现给用户并允许他们选择他们想要的分支,以便我可以以编程方式构建一个非常窄的refspec,其中只包含对它们感兴趣的分支。)
Git中是否有办法查询远程仓库的所有ref名称(在本例中为几KB),而还会导致获取其所有对象的成本(在此案例,几GB)? (FWIW,用户可能正在使用ssh或https网址。)
答案 0 :(得分:3)
据我所知,git show remote origin
或git ls-remote
可以在某种程度上实现这一目标。您可能需要进行一些额外的过滤或匹配才能获得所需的内容。
以下是一个例子:
$ git remote show origin
* remote origin
Fetch URL: git@10.88.1.128:Test
Push URL: git@10.88.1.128:Test
HEAD branch: master
Remote branches:
client tracked
develop tracked
index new (next fetch will store in remotes/origin)
master tracked
refs/remotes/origin/masster stale (use 'git remote prune' to remove)
server tracked
test tracked
Local branches configured for 'git pull':
masster merges with remote masster
master merges with remote master
Local ref configured for 'git push':
master pushes to master (local out of date)
index
分支是由其他人新创建的,不存储在本地。
编辑:一个更好的例子是新创建的git存储库,只设置了远程网址,没有别的。
<强> git ls-remote
强>:
$ git init
Initialized empty Git repository in /home/erix/gitRepos/test/.git/
$ git remote add origin git@10.88.1.128:Test
$ git ls-remote origin
215e658c07c0e667a73ec9247f0b98c90a4fe65a HEAD
4423ed26d1a74139997ed982cf42d681ea4eb248 refs/heads/client
1c3d2c2113d04d7771a5638729528d090d9a2eae refs/heads/develop
8277bdd3d37b9a7c02bead816efabc6849290dc1 refs/heads/index
215e658c07c0e667a73ec9247f0b98c90a4fe65a refs/heads/master
eb26276359ae355486536a4bfe5c939a5ab96fb0 refs/heads/server
62018d80b5d279ee2cbe8175a0bde30121288045 refs/heads/test
<强> git remote show
强>:
$ git remote show origin
* remote origin
Fetch URL: git@10.88.1.128:Test
Push URL: git@10.88.1.128:Test
HEAD branch: master
Remote branches:
client new (next fetch will store in remotes/origin)
develop new (next fetch will store in remotes/origin)
index new (next fetch will store in remotes/origin)
master new (next fetch will store in remotes/origin)
server new (next fetch will store in remotes/origin)
test new (next fetch will store in remotes/origin)