当我们开发项目的时候,项目会越来越大,就有可能需要其它同事进行参与,甚至进行开源,这时就需要找一个地方把代码存放起来,好供其它人下载并开发。这个地方,最好放到服务器上,因为只要能上网,就可以获取到, 现在有好多的服务器可以供我们使用,比如github. 没有使用过github,也没有关系,它是一个存放代码的网站,要使用它就要先进行注册。

  1, 首先要到GitHub 官网注册一个帐号,非常简单,填写用户名,邮箱,密码即可。注册完成后,登录,就可以看到如下的界面。

  2,注册完成后,就可以使用github了。我们要把源代码放到上面,就要在网站上找一个地方,对于github来说,它就是创建一个仓库。点击上图中的加号按钮,再点击 new Repository, 就可以看到创建仓库的页面。

  3, 在 Repository name输入 项目名称,如git-learning.  在Description 中输入项目描述,如 为了学习git 而创建的项目。点击最下面的 create repository 绿色按钮,项目创建成功。

  4, 创建成功后,就可以在这个仓库中存放代码了。但是我们怎么才能把代码存放到这个仓库中呢?比如我们要把在上面两个章节创建的math 项目放到这个仓库中 ,要怎么处理? 首先要将本地math仓库和这个远程仓库git-learing 进行连接, 使用git remote add 远程仓库的名称 远程仓库的地址,remote 就是远程的意思,名称就是给它起个命字,以后好使用,一般都会命名为origin. 地址是什么呢?就是上图中 的 https://github.com/samling1989/githublearning.git, 这就是远程仓库的地址。在math 项目中右键选中git bash, 调出git 命令窗口。

  这时再调用git remote 命令,就会出现远程仓库的名称,配置成功了。

  还可以加上参数 -v, 是--verbose 缩写,详细的意思, 它会列出远程仓库的地址。

  5, 本地仓库和远程仓库建立连接,就可以上传代码了,使用的命令是git push, 将本地的代码推送到远程仓库, 基本的命令是git push 远程仓库名 <本地分支名>:<远程分支名>

本地仓库是在master分支上,我们也想在远程仓库上建立master, 两个分支一一对应,使用比较方便。

  上传成功了,刷新一下github, 可以看到上传的代码了. 其实,如果本地仓库分支名和远程仓库的分支名相同的话,远程仓库的分支名可以省略,git push origin master 也可以实现相同的功能, 这时github 会自己创建同名的分支。

  当创建github仓库的时候,它提示我们最好创建一个README.md文件,LICENCE, 和.gitignore 文件,这也是一个完整的github项目所必须的。现在本地创建README.MD和.gitignore 文件,LICENCE 以后再说。README.md是一个markdown文件,对于整个项目的说明。.gitignore 文件则是git 提交可以忽略的文件,比如node_modules 文件。

  然后,git add . 和git commit 添加到本地仓库,然后调用git status,

  可以发现,Your branch is ahead of 'origin/master' by 1 commit.(use "git push" to publish your local commits), 本地仓库比远程仓库提前一个版本,要用git push

  也上传成功了。这时你会发现,上传一次就要输入远程仓库名和分支名,有点麻烦,可不可以简单点,输入git push. 现在试一下,

  git 要求建立 upstream branch, 它也提供了相应的命令,直接输入这个命令执行就可以了, 最终结果就是建立了当前分支与远程分支追踪关系, 这时再调用git push, 就没有问题。

  6, 现在代码共享了,也就意味着可以进行多人开发了。首先其它人要从github上复制一份代码到他自己的电脑上。使用的命令是git clone.  git clone 命令接受两个参数, 一个是source, 我们clone的代码仓库的地址(github仓库地址), 一个是要clone 到的项目目录,git clone source destination_dir,  当然最后一个参数可以省略,如果省略,git 会自动创建一个目录,目录名称就是source 的目录(项目)名称。找一个放项目的地方,然后打开git bash 命令窗口,执行git clone 命令,

  当前文件夹多了一个文件夹,another-git-learing, 克隆项目成功了。这里要注意的是,当我们进行clone的时候,我们只会把远程仓库中的当前分支拷贝到本地了,git branch, 它只显示一个分支,即使远程仓库有很多分支,这时要使用 git branch --all,显示该项目所有的分支,但是前面加上remote/origin, 表示远程分支。我们也可以使用 git checkout 远程分支下面的分支名,它就是可以在本地创建一个相同的分支。git checkout -b another_fix_branch remotes/origin/another_fix_branch

  当然你也可以clone 一个分支,git clone -b  远程仓库的地址    分支名。 执行完git clone 以后,你会发现,可以使用git push 提交代码,不用配置remote, 其实git clone 命令已经给你做了。git clone 是一系列命令的集合。 当执行git clone 时, 首先,它创建了一个新的工作目录,就是一个文件夹,名字默认是服务器上的仓库名称。然后把这个目录初始化为git 仓库。添加一个远程分支 origin, 最后,把所有的内容复制到本地文件夹中, 本地分支和远程仓库直接建立连接,我们可以push。在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库。

  7, 多人合作冲突解决

  当进行多人合作的时候,难免会产生冲突,因为大家都在一个仓库上工作。当别人提交了代码,而你又没有更新代码时,就会无法提交代码。我们直接在github上创建一个license, 模拟一下,他人提交代码。

  找到这个create new file 点击, 进入到如下页面

   输入license, 右侧有 一个choose a license template, 点击,进入了协议选择页面,左侧选择MIT, 然后右侧有一个review and submit 绿色按钮,点击,然后跳回到了上图,

在最下面有一个 commt a new line, 选择create a new file for master 单选按钮,然后点击最下面的绿色按钮,ok, 创建成功,我们的项目中多了一个license.

  这时在git-learning 文件中,git bash 命令中输入git push,

  拒绝提交代码,因为远程仓库的的代码,我们本地仓库没有。当我们使用git push 提交代码时,git 首先要检查本地仓库分支和要推送到的远程仓库的分支的版本,如果两个版本不同步或不一致,它就会报错,禁止提交,通常是本地仓库的版本小于远程仓库的版本。这时就要从远程仓库拉取代码,来保持同步。使用git pull 命令。git pull的完整命令是

  git pull  远程仓库名  远程分支:本地分支

  其实 一般,本地分支和远程分支同名,可能直接省略本地分支,git pull origin master, 由于git push的时候,分支建立了追踪关系, 直接使用git pull 也可以

 

  我们本地多了license 文件,这时再git push 就没有问题了。

  还有一种冲突,拉取代码冲突。其他人更改了代码上传了,而我们没有及时更新,也改了代码,而这两份更改都是改的同一个文件的同一个地方。我们还是在github上修改文件,模拟其它人的提交,如更改main.js 加一个console.log 语句。然后我们在本地的main.js 也增加一个console.log语句, 然后提交到本地仓库,这时执行git pull, 发现冲突了。

  其实在这种情况下,不适合用git pull, 要用git pull的分解命令,git fetch 和git merge.  git pull 是两个命令git fetch 和 git merge 的集合.

  首先,git fetch  从远端仓库拉取代码,放到本地代码库中。这时我们可以用git log --decorator --oneline 或 gitk,可以看到 它有origin/master  origin/HEAD 表示从远端仓库拉取代码成功。

  把远端的代码拉取到本地以后,可以进行对比,远端代码和本地代码进行对比,还是git diff 命令,不过参数,本地分支 远端分支 git diff master origin/master

  可以看到两个分支在main.js 中的不同, 为以后的分支合并打下基础。

  再执行git merge 操作,git merge origin/master: 合并远程分支到本地分支。它的参数是远程分支名, 可以看到如下结果。

  把冲突解决一下,然后git add 和git commit 提交到本地仓库,最后git push 推送到远端仓库。

  8, 当真正代码开发的时候,其它人向你的仓库的提交代码的时候,肯定是要授权的, 要不然,他提交的时候,就会报错。像同事之间的开发项目,授权的方式,可以是添加协作者。 在github网站,进入我们的项目

   点击第二行最右侧的Settings, 页面左侧有一个options面板,

  第一个就是collaborator(合作者),点击,要求输入密码,输入密码后,看到如下页面

  我们可以红色方框内的输入框中输入合作者的用户名,然后点击右侧的 add collaborator 按钮,添加成功之后,合作者就和我们创作者拥有的同样的权限。

  9, 删除项目

  我们这个项目,只是演示用的,没有什么大太的作用,学习完成后,可能就想把它删除掉了。还是点击上面说的settings.面板最下方有一个Danger Zone 区域,Delete this repository 按钮(如下图)

  点击可以看到一个弹窗,询问你是不是确定要删除? 在弹窗的输入框中输入你的项目名 这时它下面的按钮,就会变红色,表示可以单击进行删除了,单击进行删除。输入的内容一定要和你的项目名称一致,否则删除按钮是禁用状态,无法删除项目。

git 学习(3) ----- 代码共享和多人协作的更多相关文章

  1. Git学习笔记(7)——多人协作

    本文主要记录了,多人协作时,产生冲突时的解决情况. 多人环境创建 首先我们需要模拟一个多人环境.前面的Git的学习都是在Ubuntu上面,现在我们也搭建一个win环境吧.安装win环境下的Git,很简 ...

  2. git各种操作:基本操作 and 多人协作 and 冲突解决

    git基本操作 git 上次文件到远程仓库(参考:https://blog.csdn.net/beiqiaofeng123/article/details/104859326) 如果第一次上传,配置一 ...

  3. Git学习总结(12)——多人开发 Git 分支管理详解

    1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对远程的Git仓库有一定的了解,嘿嘿.在这一篇博客中我们来在大家讲解一下Git 分支管理,这可以说是Git的又一大特点.下面我们就来学习 ...

  4. Git复习(五)之多人协作、git push失败、git pull失败

    多人协作 多人协作时,大家都会往master和dev分支上推送各自的修改. 现在,模拟一个你的小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆: $ ...

  5. 项目管理---git----快速使用git笔记(七)------coding.net项目管理多人操作的流程规范--合并代码审核

    我们在前面已经介绍了coding.net和本地git的基本用法. 但是多人协作开发时情况会复杂得多,所以我们最好有一些规范来保证项目多人开发顺利进行. 比如说 规范一 master代码分支  需要开启 ...

  6. git学习笔记11-git多人协作-实际多人怎么开发

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  7. git学习指南

    近来学习Git,苦寻资料下发现廖雪峰老师的教程很好,在此推荐传送门 附每节总结,方便查阅 创建版本库 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 使用命令git ...

  8. $ git学习总结系列(3)——分支管理

    本文主要介绍git分支的概念及常用分支操作. 分支的概念 所谓分支,可以理解成一个个相互独立的工作空间,在每一个分支上的改动不会影响到其他分支的代码.git默认的分支是master分支. 试想一下这样 ...

  9. Git学习(四)——分支管理

    一.创建与合并分支 1.创建分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点.每次提交 ,mast ...

随机推荐

  1. java开发环境配置——IntelliJ IDEA

    关于开发工具,之前是用eclipse,后来用了一段时间idea后,发现idea比eclipse好用太多了,所以推荐大家用idea 官网下载地址:https://www.jetbrains.com/id ...

  2. Djiango初识

    加载静态文件 在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片 等.因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 st ...

  3. 20190325-HTML框架、audio标签、vedio标签、source标签、HTML表单

    目录 1.HTML框架 frameset:框架标记 frame:框架内文件 iframe:内嵌框架 2.audio标签 src:URL(可以用source标签替代) autoplay:自动播放 pre ...

  4. 51nod“省选”模测第二场 B 异或约数和(数论分块)

    题意 题目链接 Sol 这题是来搞笑的吧.. 考虑一个数的贡献是\(O(\frac{N}{i})\) 直接数论分块. #include<bits/stdc++.h> #define Pai ...

  5. Vsphere 回收未消使用的磁盘空间

    下载sdelete.exe 执行 sdelete.exe -z E: ,然后又恢复为原可用空间 关机   SHH进入物理主机,找到对应的虚机文件 执行vmkfstools -K test-Win200 ...

  6. C语言使用HZK16显示每个像素的代码

    下边内容段是关于C语言使用HZK16显示每个像素的内容. #include<stdio.h>#include<stdlib.h>void main(){ int i,j; ch ...

  7. 如何为 .NET Core CLI 启用 TAB 自动补全功能

    如何为 .NET Core CLI 启用 TAB 自动补全功能 Intro 在 Linux 下经常可以发现有些目录/文件名,以及有些工具可以命令输入几个字母之后按 TAB 自动补全,最近发现其实 do ...

  8. redis的几种数据导入导出方式【转】

    环境说明:202.102.221.11 redis源实例202.102.221.12 redis目标实例202.102.221.13 任意linux系统 一.redis-dump方式 1.安装redi ...

  9. 【iOS开发】Alamofire框架的使用二 高级用法

    Alamofire是在URLSession和URL加载系统的基础上写的.所以,为了更好地学习这个框架,建议先熟悉下列几个底层网络协议栈: URL Loading System Programming ...

  10. 三机互ping(自己总结)

    主机与虚拟机互ping设置: 点击VMware下的[编辑]--[虚拟网络编辑器]设置如下:         屏幕剪辑的捕获时间: 2016/5/21 13:10         屏幕剪辑的捕获时间: ...