Linux 局域网内通过ssh进行git仓库交互(裸仓库与非裸仓库)

局域网内通过ssh进行git仓库交互(裸仓库与非裸仓库)

首先,两个或多个机器要连接在同一个局域网内(因为没wifi,我是用手机热点),并且选定的主机要有一个建立好的仓库(本文着重说明裸仓库,非裸仓库也会介绍)

服务器主机操作:

打开ssh服务端(具体法安装我就不在这里说了)

sudo /etc/init.d/ssh start

建立一个空文件夹

mkdir workspace
cd workspace
git init

可以创建一个文件

touch news
echo 'Hello' > news

提交

git add news
git commit -m "news 01"

在这里插入图片描述

退回上一级并克隆创建裸仓库

cd ..
git clone --bare workspace

这一步显得多此一举,因为在建立仓库时就可以指定其为裸仓库,但是后面也会说明不建立裸仓库直接使用非裸仓库如何进行push操作(虽然不推荐这么做,但是这也是我琢磨了一段时间的得出来的成果,所以还是分享出来)

建立裸仓库的命令,这里不用打出来!!
git init --bare 裸仓库名称

在这里插入图片描述
至此,服务器端的仓库已经创建完毕现在,我们在家目录下得到了一个workspace.git的仓库,在同一局域网下的机器可以通过ssh来获取这个仓库的克隆了

其他机器通过ssh获取

1、首先,要得知服务器主机的ip号

这一步在服务端完成

ifconfig

在这里插入图片描述得知ip为192.168.43.121
那么其他机器可以通过ssh来获取服务器端的仓库了

2、其他机器同时也需要创建一个工作空间
mkdir WW
cd WW
git init

在这里插入图片描述

3、接下来有两种方式进行克隆服务器端仓库

一种是

git clone ssh://username@ip/工程目录

我比较喜欢第二种,因为能自己取名,觉得好管理一点

git remote add 简称 ssh://username@ip/工程目录
git fetch 简称

这里要注意,我克隆的是workspace.git,这是git clone --bare workspace克隆裸仓库命令创建的裸仓库,workspace仍然还是非裸仓库


注意:因为我两台机器用户名相同,所以username@ip直接写ip就可以了,据我的经验,所有关于ssh的连接,当用户名相同时,都可以这样

此时,机器已经将远程的仓库拷贝下来了
进入提示的master分支并查看

git checkout master
ls
cat news

在这里插入图片描述

此时WW下已经看到了远程服务端的news文件了
在这里插入图片描述

内容也是一致的

4、将本地修改的仓库push到服务端

将news文件的内容修改并且提交

echo 'H' > news
git add news
git commit -m "news 02"

在这里插入图片描述
push到远程仓库

git push gw master

在这里插入图片描述
成功!此时远程服务端裸仓库workspace.git里面的内容已经更新,可以自行pull或者fetch查看,这里就不演示了,接下来还有内容

当你要操作的远程对象不是裸仓库而是非裸仓库

这里的内容可以作为了解,一般是用不到的

利用我们上面操作创建的非裸仓库workspace,我们可以继续实验

创建新的目录并克隆这个远程非裸仓库
	cd ~
	mkdir kk
	cd kk
	git init

然后

git clone ssh://192.168.43.121/~/workspace

或者(我选择后者)

git remote add gw ssh://192.168.43.121/~/workspace
git fetch gw

在这里插入图片描述可以看到,已经成功克隆下来这个非裸仓库,我们可以作出修改并提交
在这里插入图片描述
我们可以尝试push了

git push gw master

在这里插入图片描述
成功引发错误!我只知道两种解决方案

第一种 当push的分支与远程非裸仓库目前所在分支一致时,会引发这种错误,我们可以在远程非裸仓库里创建(已经有别的分支就不用创建)一条分支,并且将当前工作分支转移过去再push

这是远程非裸仓库的操作:
在这里插入图片描述
现在再在其他机器上push

在这里插入图片描述
成功了!

第二种 在远程非裸仓库的.git目录下的config里配置一段信息

[receive]

		denyCurrentBranch = ignore

在这里插入图片描述
保存退出,现在远程机器可以随意提交,不用在乎远程仓库处于哪一个分支
如果你想在非裸仓库下看到被修改的文件,还需要执行一段命令

git reset --hard

现在cat那个被修改的文件就可以看到修改后的了

总结

如果远程仓库不是裸仓库
别的机器可以fetch或者clone,但是如果远程主机此时位于其他机器push的分支上,那么push时会报错,解决方法有两个:
1、远程仓库主机创建一个别的分支或者已经有别的分支,git checkout 别的分支,其他机器再push
2、在远程仓库主机的.git目录下面的config文件里加一句:

[receive]
		denyCurrentBranch = ignore
然后git reset --hard
就可以看到修改后push的文件了
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值