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

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



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

 

0. 常用命令一览

# 配置仓库命令(项目名:play,项目发起者的名字:icedream61,URL=get@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>,首次提交,在远程仓库创建此分支。

-u, --set-upstream
For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull(1) and other commands.

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:王轩 链接:http://www.zhihu.com/question/20019419/answer/48434769 来源:知乎

upstream不是针对远程仓库的,而是针对branch的,这一点应了那位童鞋所说的第二句话。但是upstream和有几个远程库没有必然联系。比如远程库A上有3个分支branch1、branch2、branch3。远程库B上有3个分支branchx、branchy、branchz。本地仓库有2个分支local1和local2。那么当初始状态时,local1和local2和任何一个分支都没有关联,也就是没有upstream。当通过git branch --set-upstream-to A/branch1 local1命令执行后,会给local1和branch1两个分支建立关联,也就是说local1的upstream指向的是branch1。这样的好处就是在local1分支上执行git push(git pull同理)操作时不用附加其它参数,Git就会自动将local1分支上的内容push到branch1上去。同样,local2分支也可以和远程库A和远程库B上的任何一个分支建立关联,只要给local2分支设置了upstream,就可以在local2分支上用git push(git pull同理)方便地与目标分支推拉数据。 综上所述,upstream与有几个远程库没有关系,它是分支与分支之间的流通道。 再来说说git push -u和git branch --set-upstream-to指令之间的区别。
举个例子:我要把本地分支master与远程仓库origin里的分支gaga建立关联。
(如果使用下列途径1的话,首先,你要切换到master分支上(git checkout master))
两个途径:
1. git push -u origin gaga 
2. git branch --set-upstream-to=origin/gaga master
这两种方式都可以达到目的。但是1方法更通用,因为你的远程库有可能并没有gaga分支,这种情况下你用2方法就不可行,连目标分支都不存在,怎么进行关联呢?所以可以总结一下:git push -u origin gaga 相当于 git push origin gaga + git branch --set-upstream-to=origin/gaga master

http://www.zhihu.com/question/20019419

    (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>,把自己的工作进度提交到远程仓库。

http://www.cnblogs.com/icedream61/p/4887250.html

 

 

时间: 2024-10-09 04:02:30

Git & Github 一页简明笔记(转)main的相关文章

git/github学习笔记

1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository - 强大的分支功能,适合多个独立开发者协作 - 速度块 ps:关于git的更详细的介绍于优点在此就不介绍了,教大家怎么用是关键.:) ==============运行环境======== 系统:windows git : Git-1.7.3.1-preview20101002.rar  下载地址:http://d.download.csdn.net/down/3169511/z_y_liu89 ==

git/github初级运用自如

  之前初学过一点git版本控制工具,利用github做仓库,照着github上的文档练习的了一下.不过那只篇只是照虎画猫(我的水平只能照着老虎画个猫模样,嘻嘻!). 最近在学hibernate,公司与家之间都要调用我练习的小项目,交给git/github来管理,我只想说真的爽歪歪了. 本文在我之前的那篇<git/github学习笔记>的基础上,属于那个的升级加强版,欢迎对照阅读:http://www.cnblogs.com/fnng/archive/2011/08/25/2153807.ht

解决fatal:remote error:You can&#039;t push to git://github.com/username/*.git问题的办法_Linux

解决fatal:remote error:You can't push to git://github.com/username/*.git问题的办法 今天Git push的时候 fatal:remote error: You can't push to git://github.com/username/*.git Use git@github.com:username/*.git 看来我是没有权限push啊. 解决方法: git remote rm origin git remote add

Google Code项目代码托管网站上Git版本控制系统使用简明教程

作为一个著名的在线项目代码托管网站,Google Code目前主要支持三种版本控制系统,分别为Git, Mercurial和 Subversion.Subversion即SVN相信大家都已经熟知了,这里我们要介绍的是最近新增的Git版本控制系统. 如果您在Google Code上的项目已经使用SVN进行版本管理,也可以很方便的在本地使用Git对项目进行版本管理.详细操作步骤请参考: Convert your project from Subversion to Git 下面我们要讲的主要就是如果

git/github初级运用自如 (good)

三 . 设置用户信息 这一步不是很重要,貌似不设置也行,但github官方步骤中有,所以这里也提一下. 在git中设置用户名,邮箱 $ git config --global user.name "defnngj"//给自己起个用户名$ git config --global user.email "defnngj@gmail.com"//填写自己的邮箱 在github中找到 Account Settings--->Account Admin ,找到一下信息:

Git入门学习和应用笔记

关于Git 1.BitMover公司收回Linux社区的BitKeeper免费使用权,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git. 2.什么是集中式版本控制系统 集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器. 中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆. 集中式和分布式版本控制系

Python正则表达式re模块简明笔记

简介 正则表达式(regular expression)是可以匹配文本片段的模式.最简单的正则表达式就是普通字符串,可以匹配其自身.比如,正则表达式 'hello' 可以匹配字符串 'hello'. 要注意的是,正则表达式并不是一个程序,而是用于处理字符串的一种模式,如果你想用它来处理字符串,就必须使用支持正则表达式的工具,比如 Linux 中的 awk, sed, grep,或者编程语言 Perl, Python, Java 等等. 正则表达式有多种不同的风格,下表列出了适用于 Python

Git与GitHub学习笔记(七)Windows 配置Github ssh key

前言 SSH是建立在应用层和传输层基础上的安全协议,其目的是专为远程登录会话和其他网络服务提供安全性的保障,用过SSH远程登录的人都比较熟悉,可以认为SSH是一种安全的Shell.SSH登录是需要用户名和密码的,要实现无密码登录,就需要创建SSH 密钥(ssh key),SSH 密钥可以认为是和另一台电脑通信时的唯一的识别证,SSH 密钥对可以让我们方便的登录到 SSH 服务器,而无需输入密码.GIT源代码管理就是使用此种安全机制,本文本将介绍SSH KEY的生成过程. >>>不知道配置

git的学习笔记整理

Git学习较好的网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000 开源中国的git站点:http://git.oschina.NET/oschina/git-osc/wikis/Home   msysgit是Windows版的Git,从http://msysgit.githu