如何克隆一个没有提交的裸 git 回购并在克隆期间获得正确的 HEAD 引用?
How to clone a bare git repo with no commits and get the correct HEAD ref during the clone?
This answer claims that the issue was fixed in version 1.8.4.3
, but I still encounter it in version 2.25.1
. It appears to work as expected in version 2.32.0
, so I'm not sure when it was actually fixed.
有没有办法使用 clone
子命令在 git
版本 2.25.1
中获得预期的行为(克隆后不必 checkout/switch 分支)?
复制步骤如下:
- 初始化一个裸仓库:
BARE_DIR="$PWD/bare"
WORKING_DIR="$PWD/working"
mkdir -p $BARE_DIR/repo
cd $BARE_DIR/repo
git init --bare
- 更改 HEAD 参考:
git symbolic-ref HEAD refs/heads/very-unlikely-to-be-your-configured-default-branch
- 克隆存储库的工作副本:
mkdir $WORKING_DIR
cd $WORKING_DIR
git clone $BARE_DIR/repo
cd repo
- 检查 HEAD 参考:
cat .git/HEAD
我希望输出为:
ref: refs/heads/very-unlikely-to-be-your-configured-default-branch
而是:
ref: refs/heads/master
没有提交就没有分支。
尽管 Git 可以在现代 Git 中从另一个 Git 读取默认分支名称,因此可以使用正确的 创建一个新的克隆ref: refs/heads/<em>name</em>
条目,Git 2.25 没有。如果是这样,新克隆中未出生的分支将与裸存储库中未出生的分支相匹配。这就是你想要的。但直到 Git 2.31.0,Git 才这样做。
如果您无法升级,解决方案是让您正在克隆的存储库至少包含一个提交,这样它就可以拥有无限多的分支名称。然后在该存储库中至少创建一个 分支名称 ——尽管实际上,创建第一个提交将为您创建一个分支名称——并使其 HEAD
指向所需的名称分支名称.
This answer claims that the issue was fixed in version
1.8.4.3
, but I still encounter it in version2.25.1
. It appears to work as expected in version2.32.0
, so I'm not sure when it was actually fixed.
有没有办法使用 clone
子命令在 git
版本 2.25.1
中获得预期的行为(克隆后不必 checkout/switch 分支)?
复制步骤如下:
- 初始化一个裸仓库:
BARE_DIR="$PWD/bare"
WORKING_DIR="$PWD/working"
mkdir -p $BARE_DIR/repo
cd $BARE_DIR/repo
git init --bare
- 更改 HEAD 参考:
git symbolic-ref HEAD refs/heads/very-unlikely-to-be-your-configured-default-branch
- 克隆存储库的工作副本:
mkdir $WORKING_DIR
cd $WORKING_DIR
git clone $BARE_DIR/repo
cd repo
- 检查 HEAD 参考:
cat .git/HEAD
我希望输出为:
ref: refs/heads/very-unlikely-to-be-your-configured-default-branch
而是:
ref: refs/heads/master
没有提交就没有分支。
尽管 Git 可以在现代 Git 中从另一个 Git 读取默认分支名称,因此可以使用正确的 创建一个新的克隆ref: refs/heads/<em>name</em>
条目,Git 2.25 没有。如果是这样,新克隆中未出生的分支将与裸存储库中未出生的分支相匹配。这就是你想要的。但直到 Git 2.31.0,Git 才这样做。
如果您无法升级,解决方案是让您正在克隆的存储库至少包含一个提交,这样它就可以拥有无限多的分支名称。然后在该存储库中至少创建一个 分支名称 ——尽管实际上,创建第一个提交将为您创建一个分支名称——并使其 HEAD
指向所需的名称分支名称.