如何推到非裸Git仓库?如何推到非裸Git仓库?(How to push to a non-bare

2019-05-08 17:07发布

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

但是,我不能从远程端这个资料库,因为我通常是在防火墙后面拉或我没有一个公网IP。

我读过,我应该推只是一个纯仓库。 我应该如何再按我修改我的远程仓库?

Answer 1:

receive.denyCurrentBranch updateInstead

这个选项加入Git的2.3 ,它使假如它是干净的服务器更新其工作树。

所以,如果你确保你拉之前在本地,并保持服务器(你应该做的,以避免合并冲突)上一个干净的工作树,你总是犯,那么这个选项是一个很好的解决方案。

用法示例:

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


Answer 2:

最佳选择

可能是最清晰,最混乱,最安全推到你的非裸露远程仓库的方式,就是推到遥远的专用分支,代表您的笔记本电脑的分支。

让我们来看看最简单的情况,并假设你在每个回购只是一个分支:主。 当你从你的笔记本电脑推到远程回购,而不是推主 - >主,主推 - >笔记本电脑主机(或类似名称)。 这样,推不影响远程回购协议已签出的主分支。 从笔记本电脑做到这一点,命令很简单:

git push origin master:laptop-master

这意味着本地主分支将被推到远程仓库命名为“笔记本电脑高手”的分支。 在您的远程回购,你就会有一个名为“笔记本电脑高手”,然后就可以合并到远程主,当你准备新的分支。

备选方案

它也可能只是推主 - >高手,而是推到非裸露的回购协议的目前签出的分支一般不推荐,因为它可能会造成混淆,如果你不明白是怎么回事。 这是因为推向签出的分支不更新工作树,所以检查git status在被推入会正好显示出相反的差别是什么最近一次推签出的分支。 它会得到特别混乱,如果推尚未开始之前,这就是为什么不建议这样做的一大原因工作树是脏的。

如果您想尝试只需按下主 - >高手,那么命令就是:

git push origin

但是,当你回到远程回购,你很可能会希望做一个git reset --hard HEAD得到同步工作目录与被推内容。 这可能是危险的 ,因为如果在远程工作树中的任何未提交的更改,你想保持它会消灭他们。 要确保你知道这样做的后果是什么,你尝试之前,或者至少可以先备份!

编辑自Git的2.3,你可以使用“一键部署”混帐推: https://github.com/blog/1957-git-2-3-has-been-released 。 但是推到一个单独的分支,然后合并通常是更好,因为它实际的合并(因此有未提交的修改,就像合并时有效)。



Answer 3:

我建议有一个裸存储库并在服务器本地工作(非裸)回购。 你可以从推笔记本电脑服务器裸露的回购协议的修改,然后从裸露的回购协议服务器工作回购拉。 我这样说的原因是因为你可能有很多的服务器完成/未完成的分支,你将要复制的笔记本电脑。

这样,您就不必担心分支的状态检查了服务器上的工作回购,同时推动更改服务器。



Answer 4:

另一种选择是建立一个反向的SSH隧道,这样可以拉动而不是推动。

# start the tunnel from the natted box you wish to pull from (local)
$ ssh -R 1234:localhost:22 user@remote

# on the other box (remote)
$ git remote add other-side ssh://user@localhost:1234/the/repo
$ git pull other-side

如果你想隧道在后台运行

$ ssh -fNnR 1234:localhost:22 user@remote


Answer 5:

你可以做:

$git config --bool core.bare true

这可以在裸露或中央存储库来完成,这样就会接受来自非裸库推的任何文件。 如果你这样做在非纯仓库那么我们不能从非裸露的将任何文件的裸库。

如果你是在PC制造中心和非裸露回购练GIT它可能不会出现在一些PC的推送文件,但它一直推。 您可以通过运行检查。

$git log在中央回购。

除此之外,如果你推到GitHub上会显示文件那里。



文章来源: How to push to a non-bare Git repository?