1、部署SSH keys

打开终端执行(使用注册git使用的邮箱地址)

ssh-keygen -t rsa -C "xxxx@xx.com"

察看密钥

cat ~/.ssh/id_rsa.pub

将密钥复制到getlab中,添加即可

2、本地使用git

git init           //在当前文件夹中初始化本地仓库

git init  filename         //在当前文件夹中创建一个文件夹并初始化为仓库

git remote add origin git@gitlab.com....git         //绑定远端,后面可以加文件名,地址如下图,SSH选项,如果用HTTP可以切换

git clone git@gitlab.com....git         //将远端内容clone到本地

git checkout origin/xxx -b xxx         //将远端分支xxx 同步到本地分支 xxx

git pull origin/xxx       //将远端分支xxx内容pull到本地

新建自己的分支并修改内容后保存到远端

git add .           //修改内容添加到暂存库中。add后的“.”表示全部修改,也可以替换为某个文件名

git commit -m "ssss"         //把暂存库中的内容提交到最终本地库

git push origin/xxx            //最终本地库的内容push到远端xxx分支

合并到主分支

git fetch origin master:master          //远端master分支中的内容下载到本地master

git diff master        //对比当前分支与master分支的不同

git merge master       //将master合并到当前分支,把远端中别人做的修改合并到本地分支,如果有冲突需要修改

重新add+commit+push到自己的远端分支

在git网页上提交merge request如下图,按照提示进行操作即可,然后把merger request的链接发给别人进行代码review,别人review完成后,相关人员会通过你的代码合并请求,也就完成了代码合并。

3、更改origin数据源

先删后加
git remote rm origin
git remote add origin git@github.com:xxx.git

直接修改config文件,.git文件夹下的config文件

4、管理项目子模块 git submodule

4.1、创建带子模块的版本库

例如我们要创建如下结构的项目

project|--moduleA|--readme.txt

创建project版本库,并提交readme.txt文件

git init --bare project.git
git clone project.git project1
cd project1
echo "This is a project." > readme.txt
git add .
git commit -m "add readme.txt"
git push origin master

创建moduleA版本库,并提交a.txt文件

git init --bare moduleA.git
git clone moduleA.git moduleA1
cd moduleA1
echo "This is a submodule." > a.txt
git add .
git commit -m "add a.txt"
git push origin master

在project项目中引入子模块moduleA,并提交子模块信息

cd project1
git submodule add ../moduleA.git moduleA
git status
git diff
git add .
git commit -m "add submodule"
git push origin master

使用git status可以看到多了两个需要提交的文件,其中.gitmodules指定submodule的主要信息,包括子模块的路径和地址信息,moduleA指定了子模块的commit id,使用git diff可以看到这两项的内容。

这里需要指出父项目的git并不会记录submodule的文件变动,它是按照commit id指定submodule的git header,所以.gitmodules和moduleA这两项是需要提交到父项目的远程仓库的。

4.2、克隆带子模块的版本库

方法一,先clone父项目,再初始化submodule,最后更新submodule,初始化只需要做一次,之后每次只需要直接update就可以了,需要注意submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone project.git project2
cd project2
git submodule init
git submodule update

方法二,采用递归参数--recursive,需要注意同样submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone project.git project3 --recursive

4.3、修改子模块

修改子模块之后只对子模块的版本库产生影响,对父项目的版本库不会产生任何影响,如果父项目需要用到最新的子模块代码,我们需要更新父项目中submodule commit id,默认的我们使用git status就可以看到父项目中submodule commit id已经改变了,我们只需要再次提交就可以了。

cd project1/moduleA
git branch
echo "This is a submodule." > b.txt
git add .
git commit -m "add b.txt"
git push origin master
cd ..
git status
git diff
git add .
git commit -m "update submodule add b.txt"
git push origin master

4 .4、更新子模块

更新子模块的时候要注意子模块的分支默认不是master。

方法一,先pull父项目,然后执行git submodule update,注意moduleA的分支始终不是master。

cd project2
git pull
git submodule update

方法二,先进入子模块,然后切换到需要的分支,这里是master分支,然后对子模块pull,这种方法会改变子模块的分支。

cd project3/moduleA
git checkout master
cd ..
git submodule foreach git pull

4.5、删除子模块

网上有好多用的是下面这种方法

git rm --cached moduleA
rm -rf moduleA
rm .gitmodules
vim .git/config

删除submodule相关的内容,例如下面的内容

[submodule "moduleA"]url = /Users/nick/dev/nick-doc/testGitSubmodule/moduleA.git

然后提交到远程服务器

git add .
git commit -m "remove submodule"

但是我自己本地实验的时候,发现用下面的方式也可以,服务器记录的是.gitmodules和moduleA,本地只要用git的删除命令删除moduleA,再用git status查看状态就会发现.gitmodules和moduleA这两项都已经改变了,至于.git/config,仍会记录submodule信息,但是本地使用也没发现有什么影响,如果重新从服务器克隆则.git/config中不会有submodule信息。

git rm moduleA
git status
git commit -m "remove submodule"
git push origin master

Git部署Git使用Git子模块相关推荐

  1. git部署与基本命令汇总

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://5323197.blog.51cto.com/5313197/1882532 GI ...

  2. 【CentOS】安装部署jenkins从git获取代码[转]

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  3. Git部署远程仓库至github

    本地部署 本地文件部署到github 设置username和email git config --global user.name "your name" git config - ...

  4. linux环境安装部署RF+Jenkins+Git(非完整版)

           初衷为想把本地的测试环境放到远程服务端,并配合Git上传拉取代码,以更适合团队协作,这样后面小组成员将只用在本地写UI自动化代码,测试没有问题后,一周提交一次测试代码到远程分支上,再由组 ...

  5. git下载子模块命令git clone --recursive和git submodule update --init

    目录 方法一:git clone --recursive 方法二:git submodule update --init 有时github上的工程可能会包含一些子模块,例如 这时候如果你只是用下面的命 ...

  6. git hook 自动部署 linux git本地服务器搭建 git root 目录 git 仓库 git root/ .git

    服务器自动部署项目之GitHooks神器 - CSDN博客 -- 每次都是将本地将代码push到远程仓库,然后再ssh到服务器上git pull,甚是麻烦.在项目开发中使用git的时候,push之后, ...

  7. GIt部署到linux服务器

    git一键部署代码到远程服务器(linux)(采坑总结) 一. 代码部署方式及思路: 1. 使用FTP/SFTP工具,上传代码 2. git人工部署.1. 开发人员本地 - git push -> ...

  8. git部署和github远程仓库搭建

    原理部分转载自:https://www.liaoxuefeng.com Git简介: Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torval ...

  9. PHP分布式部署代码同步Git实现

    PHP 分布式部署后 代码自动同步实现 项目架构如下: 需要更新代码时我们只需要把代码传到主服务器后通过定时任务主服务器自动push 代码到Git服务端,之后其他从服务器则自动从Git云端拉取最新的代 ...

  10. GIT部署(三)GIT 远程仓库:添加远程库、从远程库克隆

    一.Git安装 在Windows操作系统下,访问Git下载地址https://git-for-windows.github.io/,如果登不进去的话直接百度搜索Git下载也是可以的. 二.注册gith ...

最新文章

  1. 北京迎“豪宅元年”:四环房价将迈入8万元时代
  2. OpenCV运动去模糊滤波器
  3. 获取webbrowser中元素的屏幕坐标
  4. JVM工作原理和特点
  5. snprintf函数用法
  6. Retroifit原理
  7. 地图分幅组件的实现(一) ——图号和经纬度转换组件
  8. mysql索引0affected_mysql 创建索引和删除索引
  9. python画棒棒糖程序_python之turtle简单绘制学习
  10. symbian获取中文的拼音
  11. 快速排序(填坑法的两种写法以及交换法)
  12. 安全世界里,你不可不知的七名全球顶级白帽黑客
  13. OpenStack-Placement组件部署详解(T版)
  14. Postman是什么 怎么用
  15. 如何清理计算机类重复的文件,怎么删除电脑中的重复文件
  16. 【3D数学】03 - 线性变换
  17. Python地学分析 — GDAL对遥感影像重投影
  18. 示波器直流增益|通道隔离度|带宽|时基|瞬态响应校准软件NSAT-3010
  19. addEvent函数
  20. 电大 专科 计算机应用,2015春中央电大计算机应用基础(专科)平时作业(3)

热门文章

  1. (转)AI vs 深度学习 vs 机器学习:人工智能的 12 大应用场景
  2. 图解Linux下如何搭建C#开发环境
  3. 【答题卡识别】基于matlab GUI hough变换答题卡成绩统计(带面板)【含Matlab源码 1828期】
  4. 【优化预测】基于matlab灰狼算法优化BP神经网络预测【含Matlab源码 1728期】
  5. 【手势识别】基于matlab GUI肤色手势识别(带面板)【含Matlab源码 1650期】
  6. 【图像融合】基于matlab遗传算法图像融合【含Matlab源码 1624期】
  7. 【运动学】基于matlab匀变速直线运动规律【含Matlab源码 978期】
  8. 【语音加密】基于matlab GUI语音信号加密解密【含Matlab源码 295期】
  9. 【手写字母识别】基于matlab GUI BP网络手写体大写字母识别【含Matlab源码 183期】
  10. 【图像加密】基于matlab GUI混沌系统图像加密解密【含Matlab源码 147期】