推送到非裸Git存储库。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我通常通过ssh(屏幕和vim)在远程服务器上工作,在那里我有一个Git存储库。有时我不在网上,所以我在笔记本上有一个单独的存储库(从我的遥控器上克隆)。

但是,我不能从远程存储库中提取,因为我通常在防火墙后面,或者我没有公共IP。

我已经读到,我应该直接推到一个空荡荡的存储库中。然后如何将更改推送到远程存储库?

提问于
用户回答回答于

样本使用情况:

git init server
cd server
touch a
git add .
git commit -m 0
git config --local receive.denyCurrentBranch updateInstead

cd ..
git clone server local
cd local
touch b
git add .
git commit -m 1
git push origin master:master

cd ../server
ls

产出:

a
b
用户回答回答于

最佳选择

也许,最干净、最不容易混淆、最安全的方式是将你的非裸远程存储库推送到表示你的膝上型计算机分支的远程专用分支中。

git push origin master:laptop-master

这意味着本地主分支将被推送到远程存储库中名为“膝上型计算机-主”的分支。在你的远程回购,将有一个新的分支名为“笔记本-主人”,然后可以合并到你的远程主机,当你准备好了。

备选方案

也有可能只推主人->主人,但推到当前签出分支的非裸回购通常是不推荐的,因为如果你不了解发生了什么,它可能会混淆。这是因为推到签出分支不会更新工作树,所以检查git status在被推入的签出分支中,将显示与最近推出的完全相反的差异。如果工作树在完成推送之前是脏的,这将特别令人困惑,这也是不建议这样做的一个重要原因。

如果想尝试只按master->master,那么命令是:

git push origin

但是当你回到远程回购系统时,你很可能会想做一个git reset --hard HEAD若要使工作树与被推送的内容同步,请执行以下操作。这可能很危险,因为如果有未承诺您希望保留的远程工作树中的更改将消除它们。在尝试之前,一定要知道这会带来什么后果,或者至少先做一个备份!

扫码关注云+社区