当我们开发项目的时候,项目会越来越大,就有可能需要其它同事进行参与,甚至进行开源,这时就需要找一个地方把代码存放起来,好供其它人下载并开发。这个地方,最好放到服务器上,因为只要能上网,就可以获取到, 现在有好多的服务器可以供我们使用,比如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. mybatis基础(上)

    框架图 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将SqlSessionFactoryBui ...

  2. vue中使用Element主题自定义肤色

    一.搭建好项目的环境. 二.根据ElementUI官网的自定义主题(http://element.eleme.io/#/zh-CN/component/custom-theme)来安装[主题生成工具] ...

  3. 解决注册并发问题并提高QPS

    前言:前面在本地的windows通过apache的ab工具测试了600并发下“查询指定手机是否存在再提交数据”的注册功能会出现重复提交的情况,并且在注册完成时还需要对邀请人进行奖励,记录邀请记录,对该 ...

  4. iOS----------禁止输入汉字

    说明: ^.*[\u4e00-\u9fa5].*$ 是否包含中文^[\u4E00-\u9FA5]+$ 是否全中文 - (BOOL)textField:(UITextField *)textField ...

  5. Visual Studio 无法记忆标签页、断点等的解决办法

    1.到工程目录删除*.suo文件 2.*.suo默认是隐藏的,需要打开查看隐藏文件的开关

  6. Servlet工作原理解析 《深入分析java web 技术内幕》第九章

    参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...

  7. WordCount

    一.Gitee地址:https://gitee.com/zjgss99/WordCount 二.项目分析: 对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式输出到默认文件中,以及其他扩 ...

  8. jenkins自动化工具使用教程(转)

    自动化构建.测试.部署.代码检测越来越重要.主要有一下几点原因 企业做大,项目变多,多端支持(web,h5,小程序等) 微服务提倡高内聚低耦合,项目因拆分变多 DevOps自动化运维流行 集群化,高可 ...

  9. Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization(二)

    接着上篇Asm2Vec神经网络模型流程继续,接下来探讨具体过程和细节. 一.为汇编函数建模  二.训练,评估   先来看第一部分为汇编函数建模,这个过程是将存储库中的每一个汇编函数建模为多个序列.由于 ...

  10. SQLServer之修改FOREIGN KEY约束

    使用SSMS数据库管理工具修改FOREIGN KEY约束 1.连接数据库,选择数据表->右键点击->选择设计(或者展开键,选择要修改的外键,右键点击,选择修改,后面修改步骤相同). 2.在 ...