由于小组工程需要使用git&github的版本控制来协作,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅。

  相信这种一页的简明笔记,对大家也是有帮助的。我的笔记总结自廖雪峰的Git教程(这是个链接,点进去就好^_^)。

  请不怎么了解Git的同学先去看廖雪峰的教程,好好学习,因为我这里并不会陈列知识上的细节。


  使用方法:常用命令供随时查阅,其余内容供新手了解。


0. 常用命令一览

# 配置仓库命令(项目名:play,项目发起者的名字:icedream61,URL=git@github.com:icedream61/play.git)
git clone URL # 第一次克隆远程仓库,并关联:远程仓库 -> 本地仓库
git remote add origin URL # 第一次推送本地仓库,并关联:本地仓库 -> 远程仓库(远程仓库名习惯起为origin,请入乡随俗) # 配置分支命令(分支名:dev,远程仓库名:origin)
git checkout -b dev origin/dev # 第一次克隆远程分支,并关联:远程分支 -> 本地分支
git push -u origin dev # 第一次推送本地分支,并关联:本地分支 -> 远程分支 # 调试命令
git remote # 查看远程仓库名(如origin)
git remote -v # 查看远程仓库库的名字、URL地址以及自己拥有的权限(fetch & push,即 克隆 & 推送)
git branch # 查看本地所有分支,以及自己当前所处的分支(前面有星号)
git status # 查看本地工作区、暂存区状态
git tag # 查看本地所有标签
git show <tag> # 查看对应标签详细信息
git log # 查看所有历史版本(详细信息)
git log --pretty=oneline # 查看所有历史版本(一个版本一行信息)
git reflog # 查看所有历史操作(同样可以加单行参数,不过貌似没区别) # 协同开发命令
git pull # 克隆全部远程分支:远程仓库 -> 本地仓库
git push origin <branchs> # 推送本地分支:本地仓库 -> 远程仓库(分支名以空格分割)
git push origin <tags> # 推送本地标签:本地标签 -> 远程标签(标签名以空格分割)
git push origin --tags # 推送全部本地标签:本地标签 -> 远程标签 # 单机开发命令
git add <files> # 添加文件:工作区 -> 暂存区(文件名以空格分割)
git add -A # 添加所有文件:工作区 -> 暂存区(参数-A也可以写成--all)
git commit -m ".." # 提交所有文件:暂存区 -> 本地仓库(""中的注释一定写清楚~)
git checkout -- <files> # 撤销文件在工作区的修改:暂存区 -> 工作区
git reset HEAD <files> # 撤销文件的提交:本地仓库 -> 暂存区(就是回退到当前版本^_^)
git reset HEAD # 撤销所有文件的提交:本地仓库 -> 暂存区
rm <files> # 删除工作区的文件(这个按说不算git命令=_=)
git rm <files> # 删除暂存区的文件
git reset --hard commit_id # 切换到指定版本(commit_id可以改成HEAD、HEAD^、HEAD^^、……,即当前版本、上一版本、……) # 单机分支管理命令
git branch dev # 创建dev分支
git checkout dev # 切换至dev分支
git checkout -b dev # 创建并切换至dev分支
git merge my_dev # 将my_dev分支合并到当前所处分支中(通过git branch命令查看当前所处分支)
git branch -d my_dev # 删除my_dev分支 # 单机标签管理命令
git tag <tagname> # 为当前版本(HEAD指向的版本)打一个标签
git tag <tagname> commit_id # 为指定版本(commit_id对应版本)打一个标签
git tag -a <tagname> -m ".." # 为当前版本打一个标签,加上备注信息
git tag -d <tagnames> # 删除本地标签(标签名以空格分割)

1. 安装Git

  检查是否安装:命令行下输入git,能找到命令即可。

Mac OS X 已预置
Ubuntu sudo apt-get install git
较老的Ubuntu 或 其余Linux系统 从Git官网源码安装,详见廖雪峰的Git教程
Windows 详见廖雪峰的Git教程

  Git安装之后,需要在命令行写三条命令设置下:

git config --global user.name "icedream61"                # 建议和github保持一致
git config --global user.email "icedream@sjtu.edu.cn" # 建议和github保持一致
git config --global color.ui auto

2. 熟悉Github

  首先要去Github上面注册一个账号,具体细节见官网。

  登陆进去Github,随时点左上角的小猫头像便可以回到主页。主页上方搜索框可以搜索开源项目,四张醒目的图片是Github的官方使用教程(显然是英文),下面左侧是你所参与项目的近期动态,右侧则是你所参与的项目列表。在这里,你可以看到 +New repository 按钮,用来创建新项目的按钮。

  在Github中,创建项目又叫创建项目“仓库”(repository)。因为Github一个项目就是一个存放代码的仓库,大家都可以来看代码、下载代码……

  Github是允许你在线改代码的,但往往在线修改并不容易(如Android代码,显然下载到本地用IDE才是正道),因此往往大家都下载代码在本地修改,改好了传上去。下载上传代码有两种方式,一种是点按钮的,一种是命令行的,这里只介绍命令行的。

  Github是基于一个叫Git的命令行工具的,这东西的历史详见廖雪峰教程开篇的Git简介。日常使用中,Github是需要和Git协同工作的,一般流程都是这样:

新建项目

上Github,新建一个项目仓库,做好基本设置,写好简介

这样,你和别人便都可以看到这个项目了

下载代码

上Github,找到项目,在页面右侧下方找到clone URL,选择传输方式(SSH最快),点击按钮复制网址

进入本地某目录(如workspace),输入命令:git clone URL(刚才的网址),选择yes

假如刚才的项目叫play,你现在本地便会多个目录workspace/play/,里面是项目的全部代码

3. 设置SSH KEY

  本地Git和远程Github通信是采用ssh协议的,因此需要设置ssh密钥。

  如果目录~/没有.ssh目录,则需要创建ssh密钥,命令:ssh-keygen -t rsa -C "youremail@example.com"(换成你的邮箱)

  上Github,右上角点你自己的头像,选settings;左侧,选择SSH keys进入;选Add SSH key,写个Title,把~/.ssh/id_rsa.pub内容复制到文本框Key,点Add key。

  搞定。

  对了,给Github设置ssh密钥,你的邮箱应该会收到邮件提醒的~

4. 仓库(又称版本库)与远程仓库、版本控制、分支、标签

  这几个概念必须清晰,这里只做简述,详见廖雪峰教程。

  在Git中,有仓库和工作区之分。以刚才的play项目为例,你项目根目录workspace/play/便是你的工作区,而仓库则是workspace/play/.git/目录(隐藏的)。你平时工作就在工作区工作,文件随便改;想保存了,就利用Git的命令存入仓库;想恢复了,就利用Git的命令从仓库恢复,这样工作区便成了你之前保存的样子。

  远程仓库,就是像Github这样的地方。本地的修改,上传到远程仓库,可以免得本地代码丢失,以及方便大家协同工作、方便发布代码。

  Git会把每个版本都存一份,而HEAD指针指向当前版本。你用git clone下载的就是HEAD指针所指的版本,而你可以查看所有版本信息,可以用HEAD指向任何之前的版本,便退回去了。

  Git有飞快的分支管理(比别的类git软件分支管理快得多),比如play这个项目上线了,大家开始用稳定版。而你们团队打算继续开发,有开发UI界面的、游戏内核的等等,那么你们便需要各自创建自己的分支去开发,此时你们便依旧可以正常从Github上传和下载代码,而由于所处分支不同,你们各自的开发进度、你们的开发和上线的版本都不会互相影响。等各自开发完了,再把各个分支合并起来,形成新的版本继续开发和发行。

  Git有标签管理,你可以给某个版本打上独特的标签,这样以后便可以轻松定位到了。例如发行什么1.0版、2.0版,开发1.1版、1.1.3版之类的,随你喜欢。

  熟练使用这些功能,可以极大提高开发效率。

5. 如何本地开发

  想要本地开发,这个大家先要理解了Git的几个文件存储区:(依旧以workspace/play/目录为例)

    (1)工作区:就是这个workspace/play/目录,除了里面的.git文件夹之外,都算做工作区。就是本地一个文件目录,该怎么开发怎么开发就好。

    (2)暂存区:在.git中的一个地方,如果这里没有和本地仓库的当前版本完全同步,工作区就被称为是“不干净的”。

      (我没看错的话,廖雪峰教程中给的暂存区实际目录应该已经过时,大家请去自行查阅资料,找到真正的暂存区所在+_+)

    (3)本地仓库:也在.git中的一个地方……这里面存着所有版本和所有信息,全都不会删,可以从这里随时找到任何一个版本。

    (4)远程仓库:在Github上,这里不具体讲解。

  然后,自己灵活使用命令就好。而且不同小组开发情况不同,也无法一概而论,就不赘述了,只说下三个区。

 

6. 小组协作方式

  我们假设情况很简单:有一个master是发行版,一个dev是开发版,然后每个人有自己的一个分支。

  首先是A同学创建好项目:

    (1)在Github上创建一个项目仓库,写好使用方法。

    (2)找个目录,输入:git clone URL,把仓库内容clone下来。

    (2+)在工作区输入:git remote -v,确认远程库的名字、地址以及自己拥有的权限(fetch&push)。

    (2+)在工作区输入:git branch,确认当前只有master分支,并且master前面有个星号(*表示当前正处于此分支下)。

    (3)写好master分支(发行版),写入本地仓库,在工作区输入:git push origin master,推送分支。

    (4)在工作区输入:git checkout -b dev,创建并切换到dev分支。当然,依旧可以用git branch确认。

    (5)写好dev分支(开发版),写入本地仓库,在工作区输入:git push -u origin dev,推送分支。

  然后去通知所有同学来参与项目,而参与项目的B同学则要这样:

    (1)在Github上找A同学要到push代码的权限(否则只能clone下来,不能push修改)。

    (2)找个目录,输入:git clone URL,把仓库内容clone下来。

    (3)在工作区输入:git checkout -b dev origin/dev,创建一个dev分支并和远程dev分支关联起来。

  这样一来,所有同学便都可以在本地开发并协同工作了,具体流程就像这样:

    (1)在工作区输入:git checkout -b <name>,创建自己的分支。

    (2)使用:git push -u origin <name>,首次提交,在远程仓库创建此分支。

    (3)开发

    (3+)随时使用:git push origin <name>,提交代码。

    (3+)随时使用:git pull,取得最新dev代码。

  当自己的开发成果可以合并到dev分支时,先保证本地dev代码是最新的,然后:

    (1)使用:git checkout dev,切换到dev分支

    (2)使用:git merge <name>,将自己的分支合并到dev中

    (3)使用:git push origin dev,将dev分支推送到远程仓库

  一旦要在另一个电脑(或目录)中建立开发环境,则只需要:

    (1)使用:git clone URL,把仓库内容clone下来。

    (2)在工作区输入:git checkout -b dev origin/dev,创建一个dev分支并和远程dev分支关联起来。

    (3)在工作区输入:git checkout -b lq origin/lq,创建自己的lq分支并和远程那个自己之前写着一半的分支关联起来。

  一旦要在两个电脑(或目录)中切换着开发,则只需要:

    (1)切换目录,使用:git pull,得到最新代码。

    (2)开发

    (3)使用:git push origin <name>,把自己的工作进度提交到远程仓库。

7. 结语

  再次重申,这些命令每个的含义和使用方法,不懂的请去看廖雪峰的Git教程,我这是个一页手册,不是教程^_^

Git & Github 一页简明笔记的更多相关文章

  1. Git & Github 一页简明笔记(转)main

    由于小组工程需要使用git&github的版本控制来协作,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅. 使用方法:常用命令供随时查阅,其余内容供新手了解. 0. 常用命令一览 ...

  2. HIT2019春软件构造->Git&Github学习笔记

    由于软件构造课程需要,学习使用git,以下作为学习笔记. 一.Git初始化及仓库创建和操作  1.基本信息设置(设置签名)  命令        项目级别/仓库级别:仅在当前本地库范围内有效 git ...

  3. Git、Github、Gitkraken 学习笔记

    <Git.Github.Gitkraken 学习笔记> 一.写在前面 1.参考资料 本文参考 <Pro Git> 一书. 在官网有免费在线版可供阅读:https://git-s ...

  4. git/github学习笔记

    郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...

  5. Git总结笔记1-搭建和使用30条简明笔记

    1.环境搭建: Linux:安装git安装包(yum install -y git) Windows:到官网下载安装包 安装完成后配置如下用户名和邮箱: git config --global use ...

  6. Python开发【笔记】:git&github 快速入门

    github入门 简介: 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大 ...

  7. 【Git/GitHub学习笔记】基本操作——创建仓库,本地、远程同步等

    近日想分享一些文件,但是用度盘又太麻烦了(速度也很恶心).所以突发奇想去研究了下GitHub的仓库,这篇文章也就是一个最最最基础的基本操作.基本实现了可以在GitHub上存储文本信息与代码. 由于我的 ...

  8. git & github 菜鸟笔记

    1.概念: 最先进的分布式版本控制系统 文件修改该提交的内容:---版本 文件名 用户 说明 日期 GitHub网站上线了,它为开源项目免费提供Git存储 --CVS及SVN都是集中式的版本控制系统, ...

  9. Git/Github使用方法小记

    今天把人间网的桌面客户端renjian-deck正式开源了,之前对javascript的了解其实非常的不够的,所以这一次的代码写的也是乱七八糟重用性及其低下,虽然我无数次的想把代码重新整理一下,不过还 ...

随机推荐

  1. facebook开源前端UI框架React初探

    最近最火的前端UI框架非React莫属了.赶紧找时间了解一下. 项目地址:http://facebook.github.io/react/ 官方的介绍:A JavaScript library for ...

  2. jQuery Form 表单提交插件-----ajaxForm() 的应用

    Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.ajaxForm() 介绍  ajaxForm ...

  3. MyEclipse 6.5 代码自动提示功能配置教程

    1. 打开MyEclipse 6.0.1,然后“window”→“Preferences” 2. 选择“java”,展开,“Editor”,选择“Content Assist”. 3. 选择“Cont ...

  4. C++杂谈(一)const限定符与const指针

    const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...

  5. three Sum

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  6. BI Project Managerment

    Design doc is the meta data of the code. The project management plan is crucial to your project sinc ...

  7. HTable和HTablePool使用注意事项

    HTable和HTablePool都是HBase客户端API的一部分,可以使用它们对HBase表进行CRUD操作.下面结合在项目中的应用情况,对二者使用过程中的注意事项做一下概括总结. HTable ...

  8. TestNG之参数化

    TestNG提供了两种参数化的方式,一种是通过XML,一种是通过代码实现,下面对这两种方式做介绍. 一.通过xml /** * <suite name="Suite" par ...

  9. python实现虚拟茶话会

    这个项目目的是编写一个聊天服务器,该聊天服务器的功能有: 服务器能同时接收来自不同用户的连接 允许用户同时操作 能够解释命令,例如,say或者logout命令 服务器容易扩展 这个项目里面我们会使用到 ...

  10. SPOJ QTREE Query on a tree --树链剖分

    题意:给一棵树,每次更新某条边或者查询u->v路径上的边权最大值. 解法:做过上一题,这题就没太大问题了,以终点的标号作为边的标号,因为dfs只能给点分配位置,而一棵树每条树边的终点只有一个. ...