gitlab的基本操作--上传、下载、库的迁移/备份及回收/重命名

  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库创建

    点击“New project”

    按照上面步骤,最后点击“Create project”
  3. 文件上传
    在客户端上(mac本的远程终端上)进行如下操作:
    Git global setup
    git config --global user.name "wtf"
    git config --global user.email "[email protected]"
    git clone ssh://[email protected]: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://[email protected]: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这个库里的文件迁移至daguan.git这个新库中,要求如下:
    (1)迁移的时候就要考虑到已有的分支;
    (2)保留以前的提交记录;
    (3)不要把本地的代码直接提交到gitLab,这样以前提交的记录和分支就都没有了。
    ##操作如下:
    git clone ssh://[email protected]:19234/linux/linux_datagrand.git
    cd linux_datagrand
    ls
    name.txt   shiyan.txt
    ##查看当前的远程仓库:
    git remote -v
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (fetch)
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (push)
    ##添加daguan.git这个远程仓库
    git remote add test ssh://[email protected]:19234/linux/daguan.git
    说明:添加远程仓库的格式:
    git remote add  仓库名字   [仓库地址]
    ##查看当前的远程仓库:
    git remote -v
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (fetch)
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (push)
    test    ssh://[email protected]:19234/linux/daguan.git (fetch)
    test    ssh://[email protected]:19234/linux/daguan.git (push)
    ##把本地的分支push到远程仓库
    git push -u test master
    这个时候有报错,内容如下:
    error: failed to push some refs to ‘ssh://[email protected]:19234/linux/daguan.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这个库里的文件迁移至daguan.git这个新库中了。
  7. 库的回收和重命名
    有的时候库迁移完成之后,老的库就不需要了,这个时候就需要我们去回收或重名了,接着上面的实例说明:
    要求如下:
    (1)我已经把linux_datagrand.git这个库里的文件迁移至daguan.git这个新库中了,那么我不想再使用git clone ssh://[email protected]:19234/linux/daguan.git 建立本地库;
    (2)我想把linux_datagrand.git这个本地库更改为daguan.git
    操作如下:
    cd linux_datagrand
    ##先删除原先的origin
    git remote remove origin
    ##查看当前远程仓库
    git remote -v
    test    ssh://[email protected]:19234/linux/daguan.git (fetch)
    test    ssh://[email protected]:19234/linux/daguan.git (push)
    ##我们一般都习惯使用origin,所以更改一下test这个名称
    命令格式:
    git remote rename <old> <new>
    git remote rename test origin
    ##再查看当前远程仓库
    git remote -v
    origin    ssh://[email protected]:19234/linux/daguan.git (fetch)
    origin    ssh://[email protected]:19234/linux/daguan.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 前是这样的:
             A---B---C  remotes/origin/master
            /
       D---E---F---G  master

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

             A---B---C remotes/origin/master
            /            D---E---F---G---H master

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

                   remotes/origin/master
                       |
       D---E---A---B---C---F‘---G‘  master

    F G 两个提交通过 rebase 方式重新拼接在 C 之后,多余的分叉去掉了,目的达到。
    ##结论:
    大多数时候,使用 git pull --rebase 是为了使提交线图更好看,从而方便 code review。
    不过,如果你对使用 git 还不是十分熟练的话,我的建议是 git pull --rebase 多练习几次之后再使用,因为 rebase 在 git 中,算得上是『危险行为』。
    另外,还需注意的是,使用 git pull --rebase 比直接 pull 容易导致冲突的产生,如果预期冲突比较多的话,建议还是直接 pull。

原文地址:http://blog.51cto.com/wutengfei/2090253

时间: 2024-08-11 21:00:10

gitlab的基本操作--上传、下载、库的迁移/备份及回收/重命名的相关文章

Java通过FTP服务器上传下载文件的解决方案

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到F

windows7搭建ftp服务器与Java上传下载ftp服务器文件

1.Windows7搭建FTP服务器 1.1 首先新建一个用户,用于登录FTP进行操作,步骤:开始\控制面板\用户帐户和家庭安全\用户帐户\管理帐户\新建账户 1.2创建用户完成后我们开始添加IIS程序服务;进入控制面板\程序\打开或关闭Windows功能 然后点击打开在FTP服务器前面打勾,也就是把其子菜单的FTP服务和FTP扩展性打勾 1.3 创建FTP站点:进入控制面板\选择管理工具\信息服务管理器\添加站点 界面 下一步 下一步 1.4 查看FTP是否部署成功 完成FTP服务器的搭建.

我的代码库-Java8实现FTP与SFTP文件上传下载

有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP服务(虽然刚开始我就是这么干的). 另外就是jdk1.8和jdk1.7之前的方法有些不同,网上有很多jdk1.7之前的介绍,本篇是jdk1.8的 添加依赖Jsch-0.1.54.jar <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -

文件上传下载

1.文件上传 文件上传下载本质是通过Socket的字节流来传输数据的.所以,对于文件上传,我们可以从HttpRequest对象获取输入流,进而获取上传文件的内容.但是采用ServletAPI并不能获取获取对应文件的字节流,而是获取整个Socket的字节流,里面包括提交的参数.上传文件内容以及其他附加信息. Servlet API上传文件,代码如下 protected void doPost(HttpServletRequest request, HttpServletResponse respo

开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载

OkHttpPlus介绍 项目地址:https://github.com/ZhaoKaiQiang/OkHttpPlus 主要功能:OkHttp封装,支持GET.POST.UI线程回调.JSON格式解析.链式调用.小文件上传下载及进度监听等功能 为什么要写这么一个库呢? 首先,是因为OkHttp在4.4之后已经作为底层的Http实现了,所以OkHttp这个库很强大,值得我们学习. 其次,在我看来,OkHttp使用起来不如Volley方便,OkHttp的回调都是在工作线程,所以如果在回调里面操作V

Struts2学习之文件上传/下载&amp;ValueStack(三)

简介 今天是学习Struts2第三天,也算struts2准备前奏告一段落,提升部分只能在后期深入了解,多看源码,多参阅资料.今天所学的知识点文件上传.下载/ValueStack&OGNL/Struts2标签 文件上传/下载 文件上传简介 a). 企业常用文件上传技术 : jspSmartUpload(主要应用 JSP model1 时代) . fileupload (Apache commons项目中一个组件). Servlet3.0 集成文件上传 Part类 b). Struts2 对文件上传

使用HttpClient实现文件的上传下载

1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活.HttpClient 用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议. 一般的情况下我们都是使用Chrome或者

asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文

近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的是windows 平台下的版本,是很好用的,下面附上说明及CURL下载地址在asp.net中,可以调用cmd命令行,运行这个脚本,实现上传下载的功能,但我需要讲的重点不在此,做为一个在线运行的项目,允许网站目录下可以运行.exe的程序是非常不安全的,所以接下来的DEMO是采用asp.net(c#)的

JAVAWEB之文件的上传下载

文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将他们表达出来.下面是具体的步骤,大家可以跟着我一步一步的用apache的fileupload插件来完成文件的上传下载. 1.创建一个web工程,我们这里取名为fileupload 2.导入相关jar包,,数据源使用的是apache-c3p0数据源,以及上传下载插件包,goson库,以及mysql驱动