![]() |
1
beyondstars 31 天前
加上 `--mirror` 参数,至于为什么参考 git-clone(1) man page.
|
![]() |
2
unclejimao 31 天前
A linux 机器上的 ./git/refs/remotes 目录是远端仓库(相对机器 A 来说,比如 github 仓库)分支的引用,
./git/refs/head 目录下是本地分支的引用,git clone 命令会传输 ./git/refs/head 目录以及./git/refs/tags 目录下的对象,然后再克隆目的地**重建** ./git/refs/remotes 目录。 具体到你的例子,从 github clone 代码到机器 A 时,master ,openwrt-22.03 ,openwrt-23.05 等这些分支都是 github 的本地分支,其引用在 github 的./git/refs/head 目录下,git clone 命令会处理这个目录并传输这些对象到机器 A ,而并不会处理 github 机器上 ./git/refs/remotes 目录的内容;对于机器 A 来说,clone 之后,本地./git/refs/head 目录会生成一个机器 A 自己的本地分支,通常是 clone 时远端仓库 checkout 的分支(比如 master ),而 github 的其他本地分支 openwrt-22.03 ,openwrt-23.05 等对机器 A 来说是远端分支,因此,这些分支的引用会被创建(重建而非复制)在机器 A 的 ./git/refs/remotes 目录,你在机器 A 上通过 git checkout -b 创建的新分支是机器 A 的本地分支,其引用保存在./git/refs/head 目录。 当你把机器 A 当做远端仓库,机器 B 当做目的地仓库时,被处理的是机器 A 的 ./git/refs/head 目录,所以 clone 的结果是: 假设 clone 执行时机器 A checkout 的分支为 bra-X ,那么在机器 B 的./git/refs/head 目录会有一个 bra-X 的本地分支,而机器 A 的其他分支比如 master ,openwrt-22.03 ,openwrt-23.05 等的引用都会被重建在机器 B 的./git/refs/remotes 目录。 |
3
huangya OP @beyondstars 发帖之前,我就加了--mirror 参数后,得到的是一个纯裸仓库。但后续操作如何弄呢?从纯裸仓库克隆再克隆一次的话,remote 仓库又不见了。以下是我在 B 机器上的操作:
tony@tony-2204-dt:/tmp$ git clone --mirror ssh://10.40.18.171/project/openwrt/trunk 克隆到纯仓库 'trunk.git'... [email protected]'s password: remote: Enumerating objects: 728729, done. remote: Counting objects: 100% (728729/728729), done. remote: Compressing objects: 100% (194406/194406), done. remote: Total 728729 (delta 504789), reused 728068 (delta 504128), pack-reused 0 接收对象中: 100% (728729/728729), 245.14 MiB | 16.86 MiB/s, 完成. 处理 delta 中: 100% (504789/504789), 完成. tony@tony-2204-dt:/tmp$ cd trunk.git/ tony@tony-2204-dt:/tmp/trunk.git$ ls branches config description HEAD hooks info objects packed-refs refs tony@tony-2204-dt:/tmp/trunk.git$ git branch * master openwrt-22.03 openwrt-23.05 tony@tony-2204-dt:/tmp/trunk.git$ git branch -a * master openwrt-22.03 openwrt-23.05 remotes/origin/HEAD remotes/origin/lede-17.01 remotes/origin/master remotes/origin/openwrt-22.03 remotes/origin/openwrt-23.05 remotes/origin/openwrt-24.10 tony@tony-2204-dt:/tmp/trunk.git$ cd .. tony@tony-2204-dt:/tmp$ git clone trunk.git/ trunk-clone-raw.git 正克隆到 'trunk-clone-raw.git'... 完成。 tony@tony-2204-dt:/tmp$ cd trunk-clone-raw.git tony@tony-2204-dt:/tmp/trunk-clone-raw.git$ ls BSDmakefile config Config.in COPYING feeds.conf.default include LICENSES Makefile package README.md rules.mk scripts target toolchain tools tony@tony-2204-dt:/tmp/trunk-clone-raw.git$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/openwrt-22.03 remotes/origin/openwrt-23.05 |
![]() |
4
skiy 31 天前 via iPhone
|
5
yuedashi 30 天前 via Android
不是专门搭的 git 服务器,正确方法就是 scp .git
|