git--使用git在局域网机器上进行代码同步


git新手,刚整明白这些事,这里留个记录。

问题描述

服务器A上已有代码,并且和本地机器B代码不一致,想建立连接,将服务器A代码,同步到B上,同时本地机C 也想考一份稳定版本的代码用于开发,以后B和C在本地开发稳定之后,再将稳定版本push到A上

解决方案

1.建立服务器A上中转仓库

假设放置中转仓库的目录是/home/a/git/repo ,服务器A工作目录的为/home/a/code,IP是1.1.1.1

用户名是a

# 建立服务器A本机的仓库
cd /home/a/code
git init
git add -A # 见解释
git commit -m "init repo"

# 建立中转仓库
cd /home/a/git/repo
#执行完之后 /home/a/git/repo下会生成一个code.git的目录,这是code的裸仓库
git clone --bare /home/a/code


一些解释:

  1. 为何要使用中转仓库?

    --bare参数表示clone的是个裸仓库,这个仓库文件夹里只有.git里的版本信息,没有代码。据说通过这样的方式可以避免A正在coding时,其他工作者突然推送代码导致A的本地代码发生冲突,所有工作者都只与中转仓库建立联系,这样冲突只会发生在中转仓库,各机本地代码不会冲突。

  2. git add -A啥意思?

    git add -A 表示使暂存区和工作区保持一致,即添加所有内容到暂存区

    git add .表示添加新文件和修改文件但不包括删除的文件

    git add -u表示添加修改文件和删除文件,不包括新文件(未跟踪的)

    注意git add不支持添加空问文件夹,得放个假文件.gitkeep占位

2.建立A本地仓库与中转仓库联系

假设对于A本地仓库来说,中转仓库我们给它起名字叫wokao,当然 其实这里的wokao并不是中转仓库名,而是中转仓库和A本地仓库的远程连接叫wokao

# 为A本地仓库添加远程连接
cd /home/a/code
git remote add wokao /home/a/git/repo/code.git

现在A的工作流程就是:

coding-> git add ->git commit ->git pull->solve conflict -> git add ->git commit ->git push

一些解释:

  1. git remote一些其他用法:

    git remote -v列出其他仓库和本地仓库的远程连接

    git remote rm wokao 删掉对于A来所名字叫wokao远程连接

    git remote rename wokao haoshuai将名字为wokao的远程连接改名叫haoshuai

3.B(已有代码)和A的中转仓库建立远程连接

假设这个远程连接名字叫niubi,B机器的本地代码目录为/home/b/code,没有本地仓库的话先按照1中一样建立本地仓库。

# 建立和A上中转仓库远程连接,假设A,IP是1.1.1.1,用户名是a
git remote add	niubi ssh://a@1.1.1.1:/home/a/git/repo/code.git
# 看下远程连接情况
git remote -v

理论上输出:

niubi ssh://a@1.1.1.1:/home/a/git/repo/code.git(fetch)

niubi ssh://a@1.1.1.1:/home/a/git/repo/code.git(push)

# 更新B上代码并合并B和中转仓库历史
git pull niubi master --allow-unrelated-histories

此时若是B仓库中本来就有文件名字和A中一样,但是内容不同,就会起冲突,使用git status查看,手动coding解决冲突之后,再git addgit commit就行,最后再git pull没啥冲突就可以push了

现在B的工作流程就是:

git pull->solve confict->coding-> git add ->git commit ->git pull->solve conflict -> git add ->git commit ->git push

一些解释:

  1. git 默认不会将两个历史无关的仓库历史合并,所以必须加上--allow-unrelated-histories
  2. git pull = git fetch +git merge

4.C(无代码)与A中转仓库建立远程连接

# 通过A中转仓库clone代码
git clone ssh://a@1.1.1.1:/home/a/git/repo/code.git
# C coding
# C git add |git commit |git pull |git push

注意事项:

  1. 进行push之前一定先用pull ,保证代码最新
  2. 进行远程操作前先用git status确保工作区干净
  3. 冲突尽量在本地解决

一些参考

  • https://github.com/geeeeeeeeek/git-recipes/wiki/3.2-保持同步
  • https://blog.csdn.net/yamanda/article/details/79375698
  • https://www.cnblogs.com/feeland/p/4500721.html
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值