myrepo/.git/refs/remotes
中有空文件夹。他们的目的是什么?
它们似乎映射到过去使用的远程名称。如果是这样,删除它们会有什么影响?
如果我不删除它们,添加与其中一个文件夹同名的遥控器会有什么影响?这会导致任何问题吗?
答案 0 :(得分:1)
如果您添加一个遥控器并向其推送,Git会将您上次推送到该遥控器的值存储到refs / remotes目录中的每个分支。
例如,您可以添加一个名为
origin
的遥控器并将master
分支推送到它:
$ git remote add origin git@github.com:schacon/simplegit-progit.git
$ git push origin master
Counting objects: 11, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 716 bytes, done.
Total 7 (delta 2), reused 4 (delta 1)
To git@github.com:schacon/simplegit-progit.git
a11bef0..ca82a6d master -> master
然后,通过查看
master
文件,您可以看到origin
遥控器上的refs/remotes/origin/master
分支是您上次与服务器通信时的内容:
$ cat .git/refs/remotes/origin/master
ca82a6dff817ec66f44342007202690a93763949
远程引用与分支(
refs/heads
引用)不同,主要是因为它们无法检出。
Git将它们作为书签移动到这些分支机构在这些服务器上的最后已知状态。
我不建议在git数据库的内部结构中添加任何子文件夹,但删除其内容应该是安全的(这只意味着下一个git fetch
将从声明的遥控器中重新获取所有内容)。
正如Pro-Git chapter on the refspecs提到:
在由
git remote add
命令自动写入的默认情况下,Git会获取服务器上refs/heads/
下的所有引用,并在本地将它们写入refs/remotes/origin/
。 因此,如果服务器上有master
分支,您可以通过以下方式在本地访问该分支的日志:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
它们都是等价的,因为Git将它们中的每一个扩展为refs / remotes / origin / master。