《[计算机软件及应用]Git用户和管理手册.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]Git用户和管理手册.doc(31页珍藏版)》请在三一办公上搜索。
1、中软国际Git使用手册2013/4/7Git用户和管理手册10 概述10.1 Git相关简介10.2 SSH21Git使用场景31.1使用Git合作开发工作流程31.1.1获取最新代码31.1.2开发者在本地迭代开发41.1.3开发者请其它同事进行code review41.1.4和中心库进行代码合并51.1.5 push代码到中心库61.1.6 合作流程总结61.2脱离服务器工作71.3现场版本控制71.4异地服务器的同步备份81.5合并时冲突的解决81.5.1逻辑冲突91.5.2树冲突91.5.3内容冲突92 windows下Git的安装102.1 安装MsysGit102.1.1 msy
2、sgit下载102.1.2 msysgit的安装图解102.1.3 使用Git远程克隆一个版本库142.1.4 Bash出现错误的解决办法162.2 安装TortoiseGit162.2.1 TortoiseGit下载地址172.2.2 TortoiseGit的安装过程172.2.3 设置172.3 TortoiseGit的日常用法182.3.1 创建新库182.3.2添加文件夹及其文件192.3.3 创建分支202.2.4 分支的切换212.2.5 查看分支的情况及修改的log212.2.6 比较版本的差异232.2.7 分支的合并243 linux下基于gitolite部署Git服务243
3、.1 基本原理253.2 安装前的准备253.2.1安装基本环境253.2.2 安装git服务器253.2.3创建git服务器管理用户253.2.4创建git仓库存储目录253.3 安装gitolite253.3.1 git拉下gitolite的安装文件263.3.2 解决报错263.4 配置gitolite263.4.1 配置gitolite管理员263.4.2 安装gitolite273. 5开始配置管理273.5.1 克隆gitolite-admin仓库273.5.2 试试能否克隆回来284 Gitolite授权详解284.1 授权文件详解284.2 定义用户组和版本库组295 附录29
4、5.1 Gitweb295.2 Gitlist的搭建295.3 GitHub的简单应用295.3.1 注册用户305.3.2 上传公钥305.3.3 新建仓库305.3.4 远程克隆30Git用户和管理手册本文档适用于windows用户和linux用户。0 概述0.1 Git相关简介 这里主要说明Git、Gitolite、Msysgit、TortoiseGit、Github、Gitlist和Gitlab这几个软件和应用之间的关系以及它们的作用,本文档主要由它们的安装、配置和使用展开的。下图表示的是它们之间的关系: Git:Git是一项技术,它是一个分布式的版本控制系统,它完全不同于集中式的版本
5、控制系统Svn,至于它们各自的优劣不是这里的重点,要了解Git和Svn的区别请参考文档Git总结(主要是git和svn的比较和git的一些优点): Gitolite: Gitolite是一款 Perl 语言开发的 Git 服务管理工具,通过公钥对用户进行认证,并能够通过配置文件对读写操作进行基于分支和路径的的精细授权。 Msysgit:Msysgit是Git版本控制系统在 Windows 下的版本。msysGit 有个简单的 GUI 工具,及简单的 Explorer 集成;但它自带的 Bash(命令行式) 非常好用,深得Linux 的真传。 TortoiseGit:TortoiseGit 只是
6、 GUI 工具,使用它需要先安装 MsysGit,这是正宗的 Git 之 Windows 版本。其用法类似于TortoiseSVN。 Github:GitHub可以托管各种git库,并提供一个web界面,它是一个使用Git服务的平台,开源项目免费托管,而私有库并非如此。已经有人将GitHub称为代码玩家的MySpace。 Gitlist: gitlist是一个非常简单好用的web方式代码浏览工具,用php写成。这个只是一个轻量级的代码浏览工具,只是对代码进行浏览,其风格与github也是极其的相似,对于代码的查看也一样具有高亮,支持markdown语法。但是它不能像github或者gitlab
7、一样进行详细的管理。如果只是进行简单的查看使用gitlist非常简单。但是如果是要做一个成熟的代码管理工具,建议使用gitlab。它十分的强大,几乎是github的翻版。0.2 SSH SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务,在智能HTTP协议出现之前,甚至是写操作的唯一标准服务。对于拥有 SHELL 权限的 SSH 登录帐号,可以直接用下面的 git 命令访问,例如:$ git clone :/path/to/repo.git 是服务器 上的用户帐号。 /path/to/repo.git 是服务器中版本库的绝对路径。若用相对路径则相对于 username 用户的
8、主目录而言。 如果采用口令认证,不能像 HTTPS 协议那样可以在 URL 中同时给出登录名和口令,必须每次连接时输入。 如果采用公钥认证,则无须输入口令。SSH 协议来实现 Git 服务,有如下方式: 其一是用标准的 ssh 帐号访问版本库。即用户帐号可以直接登录到服务器,获得 shell。 另外的方式是,所有用户都使用同一个专用的 SSH 帐号访问版本库。各个用户通过公钥认证的方式用此专用 SSH 帐号访问版本库。而用户在连接时使用的不同的公钥可以用于区分不同的用户身份。1Git使用场景1.1使用Git合作开发工作流程开始会准备一个中心git代码库。首先,我们将整理好的代码分模块在git中
9、心库中建立git库。并将文件add到中心库中。 接下来,开发者通过git-clone将代码从中心库clone到本地开发环境。对于较大的项目,我们还建议每个组选择一个负责人,由这个负责人负责从中心库获取和更新最新的代码,其它开发者从这个负责人的git代码库中clone代码。此时,对开发者来说,这个负责人的git库就是中心库了。1.1.1获取最新代码开发人员从中心库获取最新的代码:1.1.2开发者在本地迭代开发 当用户将代码clone到本地后, 就可以进行本地的迭代开发,建议用户不要在master分支上开发,而是建立一个开发分支进行开发。 在本地开发中,用户可以随意的创建临时分支,随意commit
10、。1.1.3开发者请其它同事进行code review 当本地开发完毕,可以请其它同事进行代码审查。过程为:1. user2通过git-pull命令,将开发者(user1)的开发分支(dev)pull到user2本地的一个tmp分支,并切换工作分支到该分支上进行code review。2. 完成code review后, user2切换回其原有开发分支继续开发,并告知user1已经修改完毕。3. User1将user2的tmp分支git-pull到本地tmp分支,并和dev分支进行merge。最终得到一个code review后的dev分支。 当然,user2也可以直接坐在user1旁边在他的
11、代码上进行review。而不需要走上述步骤。(图中第7步,不是git-pull,而是直接在dev分支上和user1边review边modify)1.1.4和中心库进行代码合并使用过svn的人都知道, 在commit之前,都要做一次svn update,以避免和中心库冲突。Git也是如此。现在我们已经经过了code review, 准备向中心库提交变化了, 在开发的这段时间,也许中心库发生了变化, 因此,我们需要在向中心库提交前,再次将中心库的master分支git-pull到本地的master分支上。并且和dev分支做合并。最终,将合并的代码放入master分支。此外,如果发现合并过程变化非常
12、多, 出于代码质量考虑,建议再做一次code review。下图是他的合并过程:1.1.5 push代码到中心库 此时,已经完全准备好提交最终的代码了。 通过git-push就可以了。1.1.6 合作流程总结 我们可以看到,使用git进行合作开发,这一过程和svn有很多相似性,同时,增强了以下几个环节:1. 开发者在本地进行迭代开发,可以经常的做commit操作且不会影响他人。 而且即使不在线也可以进行开发。只需要最后向中心库提交一次即可。2. 更有利于在代码提交前做code review。 以往用svn, 都是代码提交后才做code view。如果发生问题, 也无法避免服务器上有不好的代码。
13、 但是用git, 真正向中心库commit前,都是在本地开发,可以方便的进行code review, 然后才提交到中心库。更有利于代码质量。而且, 大家应该可以感到,使用git的过程中,更容易对代码进行code review,因为影响因素更小。3. 创建多分支,更容易在开发中进行多种工作,而使工作间不会互相影响。 比如user2对user1的代码进行code review时,就可以非常方便的保留当时的开发现场,并切换到user1的代码分支,在code review完毕后,也可以非常方便的切换会曾经被中断的工作现场。 诚然,带来这些好处的同时,确实也使得操作比svn复杂了一些。但我们觉得和前面所
14、能获得的好处相比,这些麻烦是值得的。 当大家用惯了之后会发现,这并不增加多大的复杂性, 而且开发流程会更加自然。请大家多动手,多尝试!1.2脱离服务器工作用过SVN的人都知道,在用SVN开发中我们不能离开服务器进行开发,但是Git可以,当你下班回家后突然对白天的某一段代码有了灵感,那么你就可以打开电脑继续工作,看下面的流程图,白天在服务器Git-pull下来的版本库一定存在的,这是你可以新建分支进行开发,在完成添加、修改等操作后,然后进行merge和本地的commit操作,等到第二天连接到电脑时push到服务器的中心库。类似于本地迭代开发。1.3现场版本控制 所谓现场版本控制,就是在客户现场或
15、在产品部署的现场,进行源代码的修改,并在修改过程中进行版本控制,以便在完成修改后能够将修改结果甚至修改过程一并带走,并能够将修改结果合并至项目对应的代码库中。因为现场是临时的工作地点,所以没有必要专门的架设一台Git服务器,在一台PC机就可以完成现场版本的控制。(1)在某一目录下面进行版本库的初始化:$ git init(2)添加文件并提交: $ git add A $ git commit -m initialized(3)为初始提交建立一个里程碑:“v1 ”: $ git tag v1(4)然后开始在工作区中工作 修改文件,提交: Git commit m(5) 当对修改结果满意,想将工作
16、成果保存带走时,可以通过下面的命令,将从 v1 开始的历次提交逐一导出为补丁文件。转换的补丁文件都包含一个数字前缀,并提取提交日志信息作为文件名,而且补丁文件还提供对二进制文件的支持。 $ git format-patch v1.HEAD (6)通过邮件将补丁文件发出。当然也可以通过其他方式将补丁文件带走。 $ git send-email *.patch最后使用git命令将Git版本库和补丁文件导入到要备份的服务器。1.4异地服务器的同步备份 假如你是一个项目经理,你可能就是项目仓库的管理者(也可能是别人),一般地的为了安全只有管理者可以把本机的仓库push到服务器中,当然根据项目的需要不排
17、除所有人有这样的权限的情况,那么管理者的职责就是备份每天的版本库,方便其他开发人员第二天的克隆。如何让辛苦的工作不会因为笔记本硬盘的意外损坏而丢失?先做个假设: 我们公司在西安有台git服务器A,其ip是:192.168.0.2 在西安的项目经理的PC机ip是:192.168.0.100 (假设他就是那个仓库管理员) 公司在北京数据中心还有一台托管服务器,ip是:206.221.217.*其中一台服务器用作Git服务器镜像(因为操作在西安,所以选择西安的那台),一般开发人员写好代码push到项目经理的pc机仓库中,然后由项目经理push到服务器,同步备份实现过程看下图:因为西安的Git服务器和
18、异地数据中心北京的 Git托管服务器建立了镜像,所以每当项目经理向公司内网服务器推送的时候,就会自动触发从内网服务器到外网 Git服务器的镜像操作。相当于图 2-1 中的步骤,步骤是自动执行的,无须人工干预。图 2-1 中标记为 mirror 的版本库就是Git镜像版本库,该版本库只向用户提供只读访问服务,而不能对其进行写操作(推送)。这样就完成了异地Git库的同步备份。1.5合并时冲突的解决Git中很多命令都可能出现冲突,但从根本上来讲,都是merge 和 patch(应用补丁)时产生冲突。而rebase就是重新设置基准,然后应用补丁的过程,所以也会冲突。一般产生冲突的类型有逻辑冲突、内容冲
19、突、树冲突。1.5.1逻辑冲突 Git自动处理(合并、应用补丁)成功,但是逻辑上是有问题的。比如另外一个人修改了文件名,但我还使用老的文件名,这种情况下自动处理是能成功的,但实际上是有问题的。又比如,函数返回值含义变化,但我还使用老的含义,这种情况自动处理成功,但可能隐藏着重大BUG。这种问题,主要通过自动化测试来保障。所以最好是能够写出比较完备的自动化测试用例。这种冲突的解决,就是做一次BUG修正。1.5.2树冲突文件名修改造成的冲突,称为树冲突。比如,a用户把文件改名为a.c,b用户把同一个文件改名为b.c,那么b将这两个commit合并时,会产生冲突。如果最终确定用b.c,那么解决办法如
20、下:git rm a.cgit rm origin-name.cgit add b.cgit commit执行前面两个git rm时,会告警“file-name : needs merge”,可以不必理会。1.5.3内容冲突两个用户修改了同一个文件的同一块区域,git会报告内容冲突。我们常见的都是这种,下面来看如何解决:先来模拟一个冲突,假设user1从user2那里克隆了一个版本,开始两人的版本库是一样的,因为是模拟我们就用一个简单文件来说明吧!这个版本库就有一个文件tmp.txt。开始的文件内容是:User1克隆后给修改了文件内容:同时呢,user2也在修改了tmp.txt文件内容:最后u
21、ser1执行pull操作,把user2的代码拉到本机进行合并,但是执行pull操作时出现了错误:User1检查发现自己“1+2+3=5”这是很明显的错误,最后手动解决冲突,删除自己的“1+2+3=5”,保留user1的“1+2+3=6”,然后执行commit操作并推到user1的库中。这就是内容冲突解决的过程。2 windows下Git的安装2.1 安装MsysGit2.1.1 msysgit下载Git-1.7.3.1-preview20101002.exe下载地址:2.1.2 msysgit的安装图解双击.exe文件开始安装:选择安装路径:同时安装Git Bash(命令行式)和Git GUI
22、:这一步主要是选择换行风格的,选择第三个Git就不会修改换行风格了:这样msysgit的安装就算结束了。2.1.3 使用Git远程克隆一个版本库双击桌面上的Git图标启动Git程序:配置全局变量:git config -global user.name “your name”,比如我的是wanganlei,自行设置。git config global user.email “your email”设置全局变量的目的主要是为了在操作时方便git对你身份的识别和验证。生成自己的公钥:生成的公钥的位于你的电脑中“C:DocumentsandSettingsAiren.ssh”的“id_rsa.pub
23、”文件下:使用记事本打开就能看到相应的信息:此时只需要将你的公钥放到你项目的服务中就可以进行git的相关操作,如何放入后面会做介绍。比如我已经把我的公钥放入我们办公室的服务器了,现在进行克隆一个版本库下来。克隆版本库:Git clone gityour serverip/仓库的绝对路径看见没,这样我克隆的仓库就保存在D:/git/test目录下了。仓库克隆到本机我们就能脱离服务器进行工作了,我们可以修改文件、添加文件、目录等,在本地提交以后推到服务器上。2.1.4 Bash出现错误的解决办法Ls不能显示中文目录:解决办法:在git/etc/git-completion.bash中增加一行:al
24、ias ls=ls -show-control-chars -color=autogit commit不能提交中文注释:解决办法:修改git/etc/inputrc中对应的行: set output-meta on set convert-meta offgit log无法显示中文注释:解决办法:在git/etc/profile中增加一行: export LESSCHARSET=iso88592.2 安装TortoiseGit安装tortoisegit的前提是必须安装了msysgit。如果你是一个linux的爱好者,完全没有必要安装windows下的图形界面TortoiseGit工具,Git
25、Bash的使用绝对的简单方便,但是比如你习惯了TortoiseSvn的使用习惯,那么TortoiseGit和它的使用有点类似,深得windows使用者的追随。2.2.1 TortoiseGit下载地址TortoiseGit-1.8.0.0-32bit.zip下载地址:2.2.2 TortoiseGit的安装过程TortoiseGit的安装过程比较简单,默认安装即可。2.2.3 设置先到TortoiseGit程序组中调用Settings进行设置:Msysgit的Git.exe的安装路径要加对,默认是 C:Program FilesGitbin如果在Git Bash里面没有设置用户信息,在这里设置
26、即可:接下来就可以使用TortoiseGit了。2.3 TortoiseGit的日常用法2.3.1 创建新库在文件夹中按右键,选择Git Create repository here就可以创建库了:在出现的窗口中,不勾选选项,直接按OK:在目录中就会出现一个名为.git的隐藏文件夹,所有库的相关内容都会存在这个文件夹中.以后不管这个项目添加多少个文件夹,整个库只会有这一个管理文件夹,这和CVS和SVN有较大差异。2.3.2添加文件夹及其文件比如我们创建了若干文件夹和文件以后,然后仓库的文件夹里面右键,选GitCommit-“master”这样才算是把文件真正的提交到我们新建的仓库里面了。接着填
27、写Message,勾选WholeProject选项,这样Commit的时候可以将整个项目的信息全部Commit上去。2.3.3 创建分支在有.git的目录中选择TortoiseGit再选CreateBranch就可以创建分支了。勾选Switchtonewbranch,就可以跳转到建立好的分支上:2.2.4 分支的切换右键选择git branch就能看见该仓库的所有分支,通过鼠标选择进行分支的切换,如下图我们现在的仓库有三个分支,前面打对勾的是当前所在的分支。2.2.5 查看分支的情况及修改的log通过选择Showlog,可以看分支情况和修改log:勾选AllBranches可以看到所有分支的情
28、况:在Message列中,绿色的是分支,红色的是当前工作分支。2.2.6 比较版本的差异通过按Shift和鼠标左键,可以选中两个版本,接着再按鼠标右键,选中Compare revisions,就可以比较两个revision了:我选中的是branch2和master分支,通过比较发现增加了log.txt:2.2.7 分支的合并首先切换到master分支,接着选Merge:然后选择branch2就可以实现将branch2分支合并到主版本master分支:到此,TortoiseGit的主要用法讲述完毕,还有其他的功能和应用,请参考相关文档:Git客户端TortoiseGit软件的安装与使用说明Tor
29、toiseGit使用入门3 linux下基于gitolite部署Git服务本教程选用的linux系统是centos 6.0。服务器的ip为:10.17.15.1623.1 基本原理git的仓库管理是通过gitolite这个开源项目工具来管理的,而他本身也是一个git仓库形式存在。另外,gitolite 采用的是 SSH 协议并且使用 SSH 公钥认证,所以基本上访问仓库就需要公钥的上传。所有的仓库/用户管理都是通过gitolite-admin仓库项目下的/conf/gitolite.conf 文件来配置的,而用户的登录信息是通过往keydir目录下添加公钥实现的。当管理员更改仓库内容并提交到服
30、务器之后,服务器便有一个事件钩子来处理相关事情,比如建立仓库和用户等。 所以从上面的基本原理,可以大致知道需要做的事情就是安装git,ssh,gitolite,上传管理员的公钥。 3.2 安装前的准备3.2.1安装基本环境yum install openssh-server openssh-client perl -默认的是root用户3.2.2 安装git服务器yum install git-core3.2.3创建git服务器管理用户添加专为git相关操作的用户git:adduser -system -shell /bin/sh-create-home -home-dir /home/git
31、 git3.2.4创建git仓库存储目录添加我们的仓库文件夹,进入/home/git 建立文件夹,并授权给git用户(其实这一步骤,gitolite安装时会帮你搞定的):cd /home/gitmkdir repositories授权:chown git:git ./repositorieschown 700 ./repositories3.3 安装gitolite因为在前面我们创建了git用户,现在切换过去吧:su git3.3.1 git拉下gitolite的安装文件git clone git:/拉下来后会在当前目录下看到gitolite文件夹吧,那就对了!然后开始安装。在git用户目录下
32、建立bin文件夹,并将gitolite安装到此目录下面:mkdir -p $HOME/bingitolite/install -to $HOME/bin如果报错,那就是缺少模块,根据提示少啥就安装啥(请回到root用户来安装哈)。我的错误大概是perl的缺少模块了,那就安装了一下,安装好了回到上面的步骤,直到安装成功:3.3.2 解决报错yum install perl-Time-HiRes安装完毕之后就回到上面继续安装gitolite吧。那么至此就是安装算完毕,接下来进行gitolite的配置吧。3.4 配置gitolite3.4.1 配置gitolite管理员 gitolite是通过ssh
33、协议的公钥管理来实现身份验证的。所以你可以把你本地电脑的公钥上传上去作为默认的管理员来管理所有的配置信息。那好,回到本地电脑生成公钥(当然你也可以直接在服务器上管理,那就在服务器上生成公钥就好了)。 我是在我的个人电脑上配置的,也就是说我可以在本机管理git服务器。在本地电脑上先看看有没有/.ssh文件夹,如果有说明已经生成过了,没有就执行下面的操作就好了:ssh-keygen你再去看看/.ssh文件下面应该有id_rsa.pub 和 id_rsa两个文件了吧,其中id_rsa是你的私钥要好好保存的,id_rsa.pub是公钥可以给你要访问的服务器的。现在把公钥复制到服务器上吧:scp /.s
34、sh/id_rsa.pub serverUserNameserverHost:/tmp上面命令当中的serverUserName和serverHost分别是上面服务器对应的用户帐号和地址,这样就把本地的公钥上传到服务器的/tmp目录下面了。 接下来那么我们回到服务器上面来操作了,开始配置gitolite啦,很简单的。 先转到/tmp目录下面把上传上来的id_rsa.pub重命名”你的管理员账号名.pub”。因为gitolite是根据这个文件名来设立帐号的,比如我会命名为admin:cd /tmpmv id_rsa.pub admin.pub(重命名)3.4.2 安装gitolite然后开始用这
35、个公钥来配置gitolite:(git用户下)$HOME/bin/gitolite setup -pkadmin.pub就这样安装好了gitolite,你可以进入你的仓库文件home/git/repositories看看,应该增加了两个仓库了文件了gitolite-admin.git 和 test.git。其中前者是管理仓库的,后者是测试用的。3. 5开始配置管理 因为管理员设为了本机的,那我们现在回到本机来管理试一下吧!3.5.1 克隆gitolite-admin仓库git clone gitserverHost:gitolite-admin 这时候就不用git用户的密码了吧,这就是ssh协
36、议作用,然后进入仓库可以看到conf和keydir两个文件夹。其中conf/gitolite.conf就是添加用户/仓库的配置文件,keydir目录下就是放置对应用户的公钥的地方。先来看看我的配置文件:这样我就有了一个自己的用户组和仓库了,修改好了直接push到服务器,服务器就会自动创建好对应的仓库和用户了,你就好好享受git之旅吧!3.5.2 试试能否克隆回来git clone git10.17.15.162:myrepos.git /此时若果不出错的话不提示要输入密码的。大功告成!4 Gitolite授权详解 Gitolite的授权是通过修改配置文件来进行精细的授权的,文件存放在gitol
37、ite-admin.git仓库中,本版本库(gitolite管理版本库)只有 admin 用户有读写和强制更新的权限。4.1 授权文件详解下面我们看一个不那么简单的授权文件:下来详解上面的授权指令:第1行,定义了用户组 admin,包含两个用户 jiangxin 和 wangsheng。第3-4行,定义了版本库 gitolite-admin。并指定只有用户 jiangxin 才能够访问,并拥有读(R)写(W)和强制更新(+)的权限。第6行,通过正则表达式定义了一组版本库,即在 ossxp/ 目录下的所有版本库。第7行,用户组 admin 中的用户,可以在 ossxp/ 目录下创建版本库。创建版
38、本库的用户,具有对版本库操作的所有权限。第8行,所有用户都可以读写 ossxp 目录下的版本库,但不能强制更新。第9行开始,定义的 testing 版本库授权使用了引用授权语法。第11行,用户组 admin 对所有的分支和里程碑拥有读写、重置、添加和删除的授权。第12行,用户 junio 可以读写 master 分支。(还包括名字以 master 开头的其他分支,如果有的话)。第13行,用户 junio 可以读写、强制更新、创建以及删除 pu 开头的分支。第14行,用户 pasky 可以读写 cogito 分支。 (仅此分支,精确匹配)。4.2 定义用户组和版本库组在 conf/gitolit
39、e.conf 授权文件中,可以定义用户组或者版本库组。组名称以 字符开头,可以包含一个或多个成员。成员之间用空格分开。例如定义管理员组:admin = wanganlei liming组可以嵌套:staff = admin engineers tester1定义版本库组pre_project = test_project testing5 附录5.1 GitwebGitweb是以网页的形式追踪代码和管理的形式,这样的管理直观、方便。Linux搭建Gitweb的参考文档:5.2 Gitlist的搭建http:/www.gitchina.org/?p=3975.3 GitHub的简单应用Githu
40、b是学习和体验git的一个开放平台,这里我们可以Fork好多的开源项目,并克隆到本地,你也可以自己创建项目仓库,与git的爱好者交流学习。5.3.1 注册用户注册地址: 5.3.2 上传公钥点击“Add SSH key”后给key命名,然后把本机的id_rsa.pub用记事本打开并复制,粘贴到key框中,最后点击“Add key”,这样我们就能在本机clone和push它上面的任意开源库了。5.3.3 新建仓库5.3.4 远程克隆git clone git:username/repositoriess name.giteg.git clone git:chinasoftwang/git-test.git 30