首页 > 代码库 > Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件

Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件

远程库

  远程库,通俗的讲就是不再本地的git仓库!他的工作方式和我们本地的一样,但是要使用他就需要先建立连接!
  远程库有两种,一个是自己搭建的git服务器;另一种就是使用GitHub,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。友情提示:在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
  远程仓库的好处:
  1、我们可以随时随地的与仓库建立连接,以实时存放我们开发的内容;
  2、与他人实现协同开发,而不是再需要来回的发送修改过的代码由他人整合在一起,git自动的帮我们完成了更新,这是最重要的也是无可比拟的!
  3、只要你不把提交到本地仓库中的代码提交到远程库,那么别人一辈子也休想看到你的代码!

一、创建远程仓库(GitHub)

1、GitHub网站地址:https://github.com/,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

2、由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要如下设置:

  第1步:创建SSH Key。在用户主目录下(例如:C:\Users\Administrator\),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

ssh-keygen.exe //创建SSH key 【公钥和私钥,连接省却了用户名密码的输入】git窗口下,直接执行ssh-keygen.exe,默认往下执行,然后把公钥复制到github上

  如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
  第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,最后点击“Add Key”按钮完成。
  说明:为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。
  假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

二、添加远程库:

1、登录GitHub网站,并按网站要求创建一个新的仓库;

2、根据GitHub网站提示,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

3、本地仓库与GitHub上相应的仓库建立关联,代码如下:(git@github.com:zh605929205/LearnGit.git为我新建的仓库路径)

$ git remote add origin git@github.com:zh605929205/LearnGit.git

  添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

4、把本地库的内容推送到远程库上,用git push命令,实际是把当前分支master推送到远程。

$ git push -u origin master

  由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令(不用带-u参数)。当然也可以不写!就需要你手动输入yes
  当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

5、通过GitHub上的仓库来克隆出新的本地仓库(可以在任意一个文件夹下,建议最好在一个固定的盘下方便于管理),要克隆一个仓库,首先必须知道仓库的地址,然后使用 git clone命令克隆从远程库克隆到本地(说白了就是下载版本库)。代码如下:

$ git clone git@github.com:zh605929205/LearnGit.git	//应用场景:切换办公地点:家和公司,第一次都能从远程库上克隆然后进行开发!

  也许还注意到,GitHub给出的地址不止一个,还可以用 https://github.com/zh605929205/LearnGit.git 这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

三、本地与远程库协同开发

1、查看远程库:

$ git remote
$ git remote -v //加上-v参数可以查看详细信息 ----> 显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

2、当本地更新完毕,提交到本地的版本库,要推送分支到远程库分支。推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

语法:$ git push origin 分支名
$ git push origin master // $ git push origin dev

  但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

    master分支是主分支,因此要时刻与远程同步;

    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

3、若是有多个分支,创建远程origin的dev分支到本地,需要创建本地分支并关联远程分支:

语法:$ git checkout -b 分支名 origin/分支名 //origin/dev为远程分支路径
$ git checkout -b dev origin/dev
$ git branch --set-upstream 分支名 origin/分支名 //若本地已有分支,可通过该命令来关联远程分支

4、从远程库中拉下分支新版本,用以更新本地库:

$ git pull origin 分支名

5、远程库推送解决冲突:

  多人协同开发,向远程推送提交时产生冲突【实质就是提交快慢的问题】,则需先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送,如下:

$ git pull //从远程获取分支
$ git commit -m "marge files" //本地更新合并
$ git push origin dev //推送提交到远程分支

  注意:如果你在公司开发某段代码而忘记推送到远程库,别人又开发了别的功能并推送到远程库(此时远程库的版本已经与你本地库版本不一致),遇到这种情况,一定要记住先把远程库中对应的分支拉下来,然后再本地提交到版本库后,再重新推送到远程库!而且每次遇到解决冲突或是版本不一致的情况,一定要先看看是谁上一次做的操作,推送前一定要与其沟通!以免推送出错!

因此,多人协作的工作模式通常是这样:
  首先,可以试图用git push origin branch-name推送自己的修改;
  如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  如果合并有冲突,则解决冲突,并在本地提交;
  没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功!
  如果git pull 提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name 关联远程分支。

6、远程库的操作都是先克隆或是把程序拉到本地,然后在本地对代码进行修改,然后更新到本地版本库,再推送到远程库!这里边儿肯定是会涉及到分支的问题,在上一文中已经详细的说明了分支的操作!具体按照流程来即可!

协同开发

  1个远程库,多个人员使用,同时对某个业务线进行开发!

  既然要实现协同开发,那么一个人铁定是不行的。就需要创建组织,然后再对这个组件进行管理添加成员,点进去这个库,在people栏下点击邀请开发人员!发送邀请的同时可以对这个开发人员进行权限分配,以限制其都能有什么权限!

  注意:非组织成员是不允许对这个仓库进行操作的!

  协同开发的时候,共同使用一个项目,当需要对这个远程库提交的时候,一定是先进行拉取操作,然后再提交!否则就会因为版本库内代码不一致的问题导致报错或是紊乱!

  两人未沟通的情况下同时提交代码到远程库,肯定是得取决于谁提交的快谁会提交到远程库!提交慢的人会被拒绝,就是因为慢的原因!所以如果遇到这种被拒绝的情况,不用惊慌,你先把远程库的代码拉取下来,然后你再提交一次就OK了!【注意:解决冲突的时候,一定要先与上一个提交的人先沟通!】

奉上一张相关错误截图,借用的老师的图片,当遇到这个问题时,一定是版本冲突的问题!把远程库的代码拉下来,重新提交就OK!

技术分享

 

四、参与开源项目 fork

1、首先你自己必需要有GitHub账号并已登录成功。

2、找到指定的开源项目GitHub地址,例如:

技术分享

3、点击图上的Fork按钮,会在自己账号下克隆一个相同的仓库,例如:

技术分享

4、使用git clone命令克隆到本地仓库,如:

$ git clone git@github.com:wheeky/learngit.git

5、在本地进行相应的操作,比如新增了一个文件(CTextBox.cs):

$ git add CTextBox.cs
$ git commit -m ‘add CTextBox.cs‘

6、使用git push命令推送更新到远程仓库:

$ git push origin master

此时远程仓库就可以看到相应的更新(红色框内显示最后提交的信息),如图:

技术分享

7、创建pull request请求,向开源项目的作者发送更新请求,如下列图示:

技术分享

  点击“New pull request”按钮,并在随后的页面里填写相应的标题、备注说明等信息提交即可,剩下的就是等原作者的处理。若提交成功可在作者的开源项目的Pull requests中可以看到自己请求记录,如下:

技术分享

五、忽略特殊文件

  在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去(按照规则填写),Git就会自动忽略这些类型的文件。不需要从头写.gitignore文件,GitHub已经为我们准备了所有语言的各种配置文件,只需要找到python的文件,组合一下就可以使用了。所有配置文件可以直接在线浏览https://github.com/github/gitignore

  注意:.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

 

Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件