我有一个裸存储库,用作我项目的中央存储。所有开发人员都会与git clone <repo>
分享。当他们做克隆时,他们会得到主分支的结账(除非他们做git clone -n
),因为repo.git/HEAD
包含ref: refs/heads/master
,使其成为活动分支。
问题是,如何正确更改活动分支?我可以简单地直接破解repo.git/HEAD
文件,但这看起来很讨厌,而且,好吧,hacky。
我尝试在repo git checkout <otherbranch>
目录中执行.git
,但是因为我不在工作树中而失败了。
我尝试了git update-ref HEAD refs/heads/otherbranch
,但刚刚更新的refs / heads / master与refs / heads / otherbranch相同(好吧,我在虚拟存储库中做了那个,而不是我的生产!)
我尝试了git update-ref --no-deref HEAD refs/heads/otherbranch
,这几乎奏效了。它更新了HEAD
文件,但它将其设置为refs/heads/otherbranch
指向的提交的SHA1。
我正在使用git版1.7.0.2.msysgit.0
进行测试。
我猜测没有办法通过git push
做到这一点,因为允许所有和各种更改你的默认分支似乎有点不安全(!),但肯定有一个更好的方法在repo .git
目录中比直接黑客攻击HEAD
文件。
如果你有权访问远程裸仓库,这个article suggests:
git symbolic-ref HEAD refs/heads/mybranch
这将更新存储库中的HEAD文件,使其包含:
ref: refs/heads/mybranch
如git-symbolic-ref
中所述
如果您无法访问远程仓库,请参阅my previous answer。
记住像git remote set-head
这样的命令:
refs/remotes/<name>/HEAD
HEAD
本身(再次,只有refs/remotes/<name>/HEAD
),因此需要git symbolic-ref
。所以git remote set-head
不是这里的答案。
git symbolic-ref HEAD
是,如果您可以直接访问远程仓库。
要更改分支,您需要将HEAD引用更改为要使用的分支。
首先列出裸存储库中的所有引用
$find ref
然后找到你的分支的参考,格式将如下refs/heads/<my_branch>
。所以下一步是检查当前参考,只需输入:
$git symbolic-ref HEAD
所以你知道哪个是当前分支然后根据需要更新它。
$git sumbolic-ref HEAD ref/heads/<my_branch>
而已。请享用。
那个瓷器命令git reset --soft <branch_name>
在裸存储库里面的git服务器上怎么样?它也必须改变HEAD。
此外,如果您无法访问裸存储库,那么通过执行git remote set-head
就可以了
看到这个以前的response
我在我们的服务器上也有一个裸仓库,并且能够使用成功检索文件
git clone //server/repo/directory -b branch_name
进入一个新的本地存储库,即使该联机帮助页说这只适用于非裸存储库。
我在申请之前和之后比较了两个目录
git symbolic-ref HEAD refs/heads/mybranch
并且似乎只有repo.git / HEAD文件被更改,所以可能只是“破解”文件是非常安全的。