Git/Gitlab抓取,提交,库的迁移/备份及回收/重命名

栏目: 编程工具 · 发布时间: 6年前

内容简介:1.gitlab基本概念GitLab是一个基于 Web 的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能。GitLab 由 GitLab Inc. 开发,使用开源许可证。GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发。它由 Ruby 写成。后来,一些部分用Go语言重写。截止2016年12月,该公司有150名团队成员,以及1400多名开源贡献者。 GitLab被 IBM,Sony,Jülich Research Center,NAS

1.gitlab基本概念

GitLab是一个基于 Web 的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能。GitLab 由 GitLab Inc. 开发,使用开源许可证。

GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发。它由 Ruby 写成。后来,一些部分用 Go 语言重写。截止2016年12月,该公司有150名团队成员,以及1400多名开源贡献者。 GitLab被 IBM,Sony,Jülich Research Center,NASA,Alibaba,Invincea,O’Reilly Media,Leibniz-Rechenzentrum (LRZ),CERN,SpaceX 等组织使用。

2.gitlab库创建

Git/Gitlab抓取,提交,库的迁移/备份及回收/重命名

点击“New project”

Git/Gitlab抓取,提交,库的迁移/备份及回收/重命名

按照上面步骤,最后点击“Create project”

3.文件提交

在客户端上(mac本的远程终端上)进行如下操作:

Git global setup

git config --global user.name "wtf"

git config --global user.email "wtf@linuxmi.com"

git clone ssh://git@gitlab.linuxmicom:19234/linux/linux_datagrand.git

cd linux_datagrand

echo "this is a test file."  >  wtf.txt

cat wtf.txt

this is a test file !

git add .

git commit -m "add a file named wtf.txt"

git push -u origin master

这样就可以将客户端文件上传到gitlab的仓库里了。

4.文件抓取

如果我在gitlab上linux_datagrand.git这个仓库里进行如下操作:

添加shiyan.txt和目录test这两个文件,那么我在客户端应该怎么操作才能将新增的文件“拉取”到本地呢?

cd linux_datagrand

git pull 或 git pull --rebase origin master

说明:建议使用git pull,原因我会在下文说明。

cat linux_datagrand

wtf.txt  shiyan.txt  test

5.在存在的文件下进行文件递交

如果我在终端上有个目录文件existing_folder,里面的文件需要递交至git库,而你又不想cp到目标库再push,那么你可以这样做:

cd existing_folder

git init

git remote add origin ssh://git@gitlab.linuxmi.com:19234/linux/linux_datagrand.git

git add .

git commit -m "Initial commit"

在push之前先进性pull操作:

git pull --rebase origin master

如果不进行pull这一步,会报如下错误:

error: failed to push some refs to git。

然后:

git push -u origin master

6.库的迁移或备份

##如我想把linux_datagrand.git这个库里的文件迁移至linuxmi.git这个新库中,要求如下:

(1)迁移的时候就要考虑到已有的分支;

(2)保留以前的提交记录;

(3)不要把本地的代码直接提交到gitLab,这样以前提交的记录和分支就都没有了。

##操作如下:

git clone ssh://git@gitlab.linuxmicom:19234/linux/linux_datagrand.git

cd linux_datagrand

ls

name.txt  shiyan.txt

##查看当前的远程仓库:

git remote -v

origin  ssh://git@gitlab.linuxmicom:19234/linux/linux_datagrand.git (fetch)

origin  ssh://git@gitlab.linuxmicom:19234/linux/linux_datagrand.git (push)

##添加linuxmi.git这个远程仓库

git remote add test ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git

说明:添加远程仓库的格式:

git remote add  仓库名字  [仓库地址]

##查看当前的远程仓库:

git remote -v

origin  ssh://git@gitlab.linuxmicom:19234/linux/linux_datagrand.git (fetch)

origin  ssh://git@gitlab.linuxmicom:19234/linux/linux_datagrand.git (push)

test    ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git (fetch)

test    ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git (push)

##把本地的分支push到远程仓库

git push -u test master

这个时候有报错,内容如下:

error: failed to push some refs to 'ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git'

hint: Updates were rejected because the remote contains work that you do

hint: not have locally. This is usually caused by another repository pushing

hint: to the same ref. You may want to first integrate the remote changes

hint: (e.g., 'git pull ...') before pushing again.

hint: See the 'Note about fast-forwards' in 'git push --help' for details.

##解决方法:

(1)由于GitLab一些分支默认被保护,仅仅拥有master级别的用户才能提交到保护分支,而且master分支默认是保护分支,其他用户需要通过合并issue请求来提交上去。所以我们先关闭这个master分支保护: Project: "Settings" -> "Repository" -> “Protected Branches(Expand)”  -> "Unprotect"。

(2)使用命令:git push -f test master

所以把本地的分支push到远程仓库命令:

git push -f test master

##这个时候,我们已经把linux_datagrand.git这个库里的文件迁移至linuxmi.git这个新库中了。

7.库的回收和重命名

有的时候库迁移完成之后,老的库就不需要了,这个时候就需要我们去回收或重名了,接着上面的实例说明:

要求如下:

(1)我已经把linux_datagrand.git这个库里的文件迁移至linuxmi.git这个新库中了,那么我不想再使用git clone ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git 建立本地库;

(2)我想把linux_datagrand.git这个本地库更改为linuxmi.git

操作如下:

cd linux_datagrand

##先删除原先的origin

git remote remove origin

##查看当前远程仓库

git remote -v

test    ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git (fetch)

test    ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git (push)

##我们一般都习惯使用origin,所以更改一下test这个名称

命令格式:

git remote rename <old> <new>

git remote rename test origin

##再查看当前远程仓库

git remote -v

origin    ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git (fetch)

origin    ssh://git@gitlab.linuxmicom:19234/linux/linuxmi.git (push)

8.git pull 和 git pull --rebase

##说明:

Git 作为分布式版本控制系统,所有修改操作都是基于本地的,在团队协作过程中,假设你和你的同伴在本地中分别有各自的新提交,而你的同伴先于你 push 了代码到远程分支上,所以你必须先执行 git pull 来获取同伴的提交,然后才能 push 自己的提交到远程分支。而按照 Git 的默认策略,如果远程分支和本地分支之间的提交线图有分叉的话(即不是 fast-forwarded),Git 会执行一次 merge 操作,因此产生一次没意义的提交记录,从而造成了递交图像的混乱。

##解决:

其实在 pull 操作的时候,,使用 git pull --rebase 选项即可很好地解决上述问题。 加上 --rebase 参数的作用是,提交线图有分叉的话,Git 会 rebase 策略来代替默认的 merge 策略。 使用 rebase 策略有什么好处呢?借用一下 man git-merge 中的图就可以很好地说明清楚了。

假设提交线图在执行 pull 前是这样的:

Git/Gitlab抓取,提交,库的迁移/备份及回收/重命名

如果是执行 git pull 后,提交线图会变成这样:

Git/Gitlab抓取,提交,库的迁移/备份及回收/重命名

结果多出了 H 这个没必要的提交记录。如果是执行 git pull --rebase 的话,提交线图就会变成这样:

Git/Gitlab抓取,提交,库的迁移/备份及回收/重命名

F G 两个提交通过 rebase 方式重新拼接在 C 之后,多余的分叉去掉了,目的达到。

##结论:

大多数时候,使用 git pull --rebase 是为了使提交线图更好看,从而方便 code review。

不过,如果你对使用 git 还不是十分熟练的话,我的建议是 git pull --rebase 多练习几次之后再使用,因为 rebase 在 git 中,算得上是『危险行为』。

另外,还需注意的是,使用 git pull --rebase 比直接 pull 容易导致冲突的产生,如果预期冲突比较多的话,建议还是直接 pull。

Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-09/153907tm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术卷1:基本算法(英文版.第3版)

计算机程序设计艺术卷1:基本算法(英文版.第3版)

Donald E.Knuth / 人民邮电出版社 / 2010-10 / 119.00元

《计算机程序设计艺术》系列著作对计算机领域产生了深远的影响。这一系列堪称一项浩大的工程,自1962年开始编写,计划出版7卷,目前已经出版了4卷。《美国科学家》杂志曾将这套书与爱因斯坦的《相对论》等书并列称为20世纪最重要的12本物理学著作。目前Knuth正将毕生精力投入到这部史诗性著作的撰写中。想了解本书最新信息,请访http://www-cs-faculty.stanford.edu/~knut......一起来看看 《计算机程序设计艺术卷1:基本算法(英文版.第3版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器