一、Git服务器搭建
任务描述
虽然有提供托管代码服务的公共平台,但是对一部分开发团队来说,为了不泄露项目源代码、节省费用及为项目提供更好的安全保护,往往需要搭建私有
Git
服务器用做远程仓库。Git
服务器为团队的开发者们,提供了协作开发平台,开发者可以基于私有的Git
服务器进行项目开发。本关任务:搭建本地
Git
服务器。相关知识
Git
服务器必须搭建在Linux
系统下,因此必须准备一台运行Linux
系统的主机,这里我们推荐Ubuntu
或者Debian
系统。 #####搭建远程登录Git服务器 如果你已经有了一台运行Ubuntu
系统的主机,而且取得了root
权限,那么如果你想要在该主机上搭建Git
服务器,需要以下几个步骤。安装并配置git
首先要在主机上安装
git
服务,在Ubuntu
下安装git
只需要一条命令即可:sudo apt-get install git
这样就在该主机上安装了
Git
服务,然后执行git config
,即可完成git
的配置。创建一个用户用来运行git服务的用户
创建一个专门的服务,来运行
git
服务,是为了使git
服务和系统的其它服务不冲突。如果git
服务可以在root
权限下运行,则以root
用户使用git
服务即可,并不需要创建专门的用户去运行git
服务。这里,我们假设创建一个名为educoder
的用户,来运行git
服务:sudo adduser educoder
这样就可以在
educoder
用户下运行git
服务。创建证书登录
虽然是私有的
Git
服务器,但是也不能允许主机随意向Git
服务器推送代码。因此,必须将需要使用Git
服务器,即需要登录到Git
服务器的主机的公钥(即id_rsa.pub
文件)导入Git
服务器的/home/git/.ssh/authorized_keys
文件里,一行一个。初始化git仓库
然后,就需要在主机下,选定一个目录做为
Git
仓库。如果我们使用/tmp/educoder.git
做为远程仓库,则需要在/tmp
目录下执行:sudo git init --bare educoder.git
这样,Git
就会创建一个空白的仓库,里面没有内容,也不存在工作区和暂存区。这是因为Git
仓库只是为了托管代码,所以不需要用户直接登录到Git
服务器上去做修改。当我们创建了Git
仓库之后,对应第二步创建专门的用户来运行Git
,这一步需要将仓库的所属关系更改为相应用户,即:sudo chown -R educoder:educoder educoder.git
禁用shell登录
出于安全考虑,第二步创建的
educoder
用户不允许登录shell
,可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,eudcoder
用户可以正常通过ssh
使用git
,但是无法登录shell
。 通过以上步骤就完成了Git
服务器的搭建,然后就可以通过Git
命令,克隆远程仓库,并向远程仓库推送代码了搭建本地Git服务器
但是,在本实训中,所有的用户都是在很高的权限下进行操作,本实训的目的也是为了让用户体验私有
Git
服务器,并掌握其搭建过程。因此,本实训允许在root
权限下运行git
服务,且需要以bash
方式使用git
操作。因此,需要在本机搭建Git
服务器,且在本机执行克隆、推送等操作。为了满足这一要求,只需以下步骤即可。安装并配置git
方法同远程
Git
服务器搭建步骤1
。初始化git仓库
由于是在本机执行操作,因此不需要证书管理,则可以直接执行初始化
Git
仓库的操作。假设远程仓库地址为/home/sample.git
,则可以在/home
目录下执行:sudo git init --bare sample.git
这样即可完成
Git
仓库的初始化。由于需要在本地执行
git
操作,因此,也不需要设定Git
服务器的登录方式。由在远程服务器搭建的步骤5
中可知,git
默认支持bash
操作,因此也不需要再做改动。由于需要在本地执行
git
操作,因此,也不需要设定Git
服务器的登录方式。由在远程服务器搭建的步骤5
中可知,git
默认支持bash
操作,因此也不需要再做改动。仅需要以上两个步骤,即可完成本地
Git
服务器搭建。该服务器允许通过bash
和远程仓库操作,且直接使用目录名做为远程仓库名。如果按照以上步骤生成了远程仓库/home/sample.git
,则可以直接在本机目录下,执行如下格式的命令,完成远程版本库的clone
:git clone /home/sample.git
即可以直接把某个目录做为远程仓库。这种方式不是典型的远程仓库模式,但是做为体验远程仓库的方法,它简单方便,可操作性强。因此,本实训就只考察本地版本库的搭建,而把远程仓库的搭建做为体验性内容由用户自己完成。
编程要求
平台已经为你提供了一台运行
Ubuntu
系统的Linux
主机,且已经为你安装了git
,但是尚未进行配置。本关的编程任务是补全右侧代码片段中Begin
至End
中间的脚本,具体要求如下:
- 配置
git
的用户名和邮箱;- 在
/tmp
目录下初始化educode.git
仓库,即仓库地址为/tmp/educoder.git
。
#配置Git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"#进入/tmp目录
cd /tmp#请在下方Begin/End星号线内填写git命令以初始化educoder.git仓库
#********** Begin **********#
git init --bare educoder.git
#********** End **********#
二、配置别名
任务描述
在操作
Git
的过程中,我们经常需要手动敲入类似于git status
或git checkout
等命令。而status
和checkout
这些单词较长,每次都要完整敲入的话,不仅浪费时间,而且还容易输错。如果可以为命令设置简写的话,比如以git st
来代替git status
,则会使操作变得更加简单方便。实际上,Git
允许我们为git
命令设置别名,以达到简化操作的目的。本关任务:为
git
命令设置别名。相关知识
设置别名
设置别名需要使用的命令是
git config --global alias
,其具体使用方法示例如下:#为status设置别名st git config --global alias.st status
执行以上步骤,即可将
st
设置为status
的别名,即执行:git st
的效果等效于执行git status
。 同样,如果需要为其他命令设置别名,也可以采用相同的方式:#为checkout设置别名co $ git config --global alias.co checkout #为commit设置别名ci $ git config --global alias.ci commit #为branch设置别名br $ git config --global alias.br branch
需要指出的是
--global
参数是一个全局参数,即设置的这些别名可以在这台主机的所有Git
仓库下使用。如果不加这个参数,则只对当前的仓库起作用。删除别名
如果需要删除已经设置的别名的时候,则需要执行以下步骤:
删除所有别名: 删除所有别名用到的命令为:
git config [--global] --remove-section alias
其中,
--global
是可选参数,加上这个参数也将本主机所有git
仓库下的别名都删除,不加这个参数则仅删除本仓库下的别名。删除指定别名:
git config [--global] --unset alias.你的别名
同样的,
--global
也是一个全局参数。如果要删除本主机所有仓库下的st
别名,则可以执行以下命令:git config --global --unset alias.st
查看别名: 如果要查看当前主机已经设置了哪些别名,则可以执行以下命令:
git config --list | grep alias
会得到类似于
alias.st=status
的信息,这就是说系统当前已经为status
设置了别名st
。本关的编程任务是,补全右侧代码片段中
Begin
至End
中间的脚本,具体要求如下:
- 为
status
设置全局别名st
;- 为
checkout
设置全局别名co
;- 为
commit
设置全局别名ci
;- 为
branch
设置全局别名br
。
#请在下方Begin/End星号线内填写git命令为系统设置全局别名
#********** Begin **********#
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch#********** End **********#
三、公共版本库的使用之码云、Github
任务描述
本关任务:在码云上创建自己的项目。
相关知识
Github和码云的介绍
GitHub
是通过Git
进行版本控制的软件源代码托管服务,由GitHub
公司(曾称Logical Awesome
)的开发者Chris Wanstrath
、PJ Hyett
和Tom Preston-Werner
使用Ruby on Rails
编写而成。
GitHub
同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,但是付费账户还可以创建私有的代码仓库。根据在2009
年的Git
用户调查,GitHub
是最流行的Git
访问站点。除了允许个人和组织创建和访问保管中的代码以外,它也提供了一些方便社会化共同软件开发的功能,即一般人口中的社区功能,包括允许用户追踪其他用户、组织、软件库的动态,对软件代码的改动和bug
提出评论等。GitHub
也提供了图表功能,用于概观显示开发者们怎样在代码库上工作以及软件的开发活跃程度。码云
Gitee
(最新独立域名)是由开源中国出品,旨在树立国内代码托管和协作开发的行业标杆,灵活便捷地支撑个人、团队、企业的开发需求的产品。码云这一产品名称,指代的是“代码”和“云平台/云服务”。它和Github
的区别是码云的私有库也是完全免费的,它提供中文服务,从而能够更好地服务国内开发者。码云分为企业版和个人版。企业版相对于个人版而言,其针对国内中小型开发团队敏捷开发的实践需要,除了代码托管之外,重点强化了与代码联系最密切的项目/任务管理和文档功能。码云
对于一个没有使用过码云的开发者来说,如果要在码云上创建项目需要采用以下步骤。
注册
首先,我们需要到码云主页面去注册一个账号,码云的网址是
https://gitee.com
,其主界面如下所示点击右上角红色框内的注册按钮,根据提示完成注册,即可获得一个码云账号。 登陆后主界面如下所示:
右上方红色框的加号按钮,提供的下拉菜单有进一步的操作。
创建项目
点击右上方的加号按钮,选择新建项目:
之后,进入新建项目界面,其界面显示如下:
从图中可以看到,我们可以设置自己项目的名称,并对自己的项目进行介绍。同时,我们也可以设置自己项目所采用的语言,并添加
gitignore
文件及添加开源许可证。在最下方,我们也可以选择将我们的项目进行公开或者保持私有,也可以选择初始化项目的方法。在项目介绍下方的三个下拉框内有更为详细的操作,请自行注册体验。 当设置好我们的项目的细节后,点击新建之后就完成了项目的创建:在项目详情的右上角有
HTTPS
以及SSH
协议的远程仓库地址,使用这个地址我们就能向向这个仓库推送代码。推送代码
当在码云上创建了项目,从而创建了代码仓库之后,我们就可以向其推送代码,如下图所示:
我们在本地创建版本库,并添加在上一步骤中创建的码云仓库做为远程仓库。使用
pull
操作拉取远程分支内容之后,通过ls
命令可以看到,将远程仓库的README.md
这一初始化文件拉取到了本地。随后我们添加helloGit
文件,并将其提价到本地仓库,随后我们将其推送至远程仓库,如下图所示:注意,推送过程中会提示你输入用户名和密码,这里需要使用注册用的邮箱和登录密码。 然后我们观察码云上的版本库可以看到:
helloGit
文件已被推送至码云上的代码仓库。Github
创建并使用代码仓库
为了使用
Github
,必须首先在其官网注册账号,注册完成后,点击右上角加号按钮创建仓库:然后,配置新仓库的名称、描述信息、公开或者私有以及是否初始化等选项:
之后就完成了仓库的创建,在仓库的主界面我们可以看到如下界面: 在界面右上角点击
Clone or download
按钮,就能看到仓库的远程地址:之后就完成了仓库的创建,在仓库的主界面我们可以看到如下界面: 在界面右上角点击
Clone or download
按钮,就能看到仓库的远程地址:但是仅有仓库地址,还无法向其推送代码。因为
Github
要求认证主机,即需要在项目的证书列表中,添加主机的公钥。然后改主机,才能向此仓库推送代码。点击Settings
按钮,选择Deploy keys
选项,可以看到如下界面:在右侧的
Title
输入框设置公钥的名称,然后在下方的key
输入框中,写入相应主机的公钥,然后该主机就能向该仓库推送代码。Fork和Pull Request
Github
提供了fork
功能。当我们发现某一个优秀的开源项目,并想为项目贡献代码时,点击fork
即可复制该项目到自己的账户下的一个仓库。在自己的仓库下进行修改后,可向原项目发起
pull Request
,以请求将自己的代码合并进原项目。项目发起方收到你的pull request
后,会对你的代码进行审核,审核通过则会将你的修改合并到项目中去。这种模式也是目前流行的开源项目的发展模式。Star
当你对一个项目很感兴趣,想实时关注该项目的进展时,可以
star
该项目,这样,当项目有改动时你就可以及时收到通知。编程要求
本关的任务是,在码云上注册账号,并创建项目,然后将此项目做为远程仓库地址,向其
master
分支推送gitTraining.txt
文件。具体要求如下:
- 在码云上注册账号并创建项目;
- 向项目中推送
gitTraining.txt
文件;- 将项目的版本库地址填入右侧
Begin/End
星号线内。
git remote add origin https://gitee.com/your_username/your_project.git