码迷,mamicode.com
首页 > 其他好文 > 详细

Git教程

时间:2016-07-17 17:01:27      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

Git学习参考网址
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/

Git安装好之后,设置用户名和邮箱:
gitconfigglobaluser.nameJocean git config –global user.email “jocean.cool@163.com”
创建版本库:
mkdirlearngit cd learngit
$ git init //通过初始化命令把这个目录变成Git可以管理的仓库

gitaddfile1.txt git add file2.txt file3.txt //添加文件
$ git commit -m “add 3 files” //提交 -m后边跟的是本次提交的说明

gitstatus// git diff //查看修改内容

gitlog// git log –pretty=oneline //只显示提交的版本号和说明

版本回退:
git  reset  –hard  HEAD^        //退回到上一个版本,退回上上个版本是HEAD^^,如果回退100个版本,可以用HEAD~100  
重新恢复新版本:
git reset –hard 版本号(版本号的前几位也可以)

$git reflog //查看命令历史

撤销修改:
1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
$ git checkout – file。
2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步:

* 第一步用命令# git reset HEAD file,就回到了1;
* 第二步按1操作。

删除文件
gitrmfile git commit -m “remove file”

创建SSH key
$ ssh-keygen -t rsa -C “youremail@example.com”

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

git从远程克隆一个本地库:
$ git clone git@github.com:path/repo-name.git

查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d

git log –graph命令可以看到分支合并图。

Bug分支  如果你有一个bug任务,你想创建一个分支issue-101来修复它,但是你当前正在dev上进行的工作还没有完成而不能提交,bug需要现在修复,所以现在你需要暂停dev上工作,Git提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:$ git stash。
  假定需要在master分支上修复,就从master创建临时分支:

1. $ git checkout master
2. Switched to branch ‘master‘
3. $ git checkout -b issue-101
4. Switched to a new branch ‘issue-101‘

  现在修复bug,需要把“Git is free software …”改为“Git is a free software …”,然后提交:

1. $ git add readme.txt
2. $ git commit -m "fix bug 101"

  修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

1. $ git checkout master
2. ...
3. $ git merge --no-ff -m "merged bug fix 101" issue-101
4. ...
5. $ git branch -d issue-101
6. Deleted branch issue-101 (...).

  Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

* 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
* 另一种方式是用git stash pop,恢复的同时把stash内容也删了:

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

1. $ git remote
2. origin

  或者,用git remote -v显示更详细的信息:

1. $ git remote -v

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

1. git push origin master

  如果要推送其他分支,比如dev,就改成

1. git push origin dev


* master分支是主分支,因此要时刻与远程同步;
* dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
* bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
* feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

多人协作  多人协作时,大家都会往master和dev分支上推送各自的修改。当你的同事也克隆一份此项目从远程库,默认情况下,只能看到本地的master分支。现在,你的同事要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:

1. $ git checkout -b dev origin/dev

  现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程,并且已经向origin/dev分支推送了他的提交,这时你也对同样的文件作了修改,并试图推送,推送失败,因为你的同事的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送,git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接。
  这回git pull成功,但是是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:

1. $ git commit -m "merge & fix hello.py"
2. [dev adca45d] merge & fix hello.py
3. $ 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。

创建标签

* 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
* git tag -a <tagname> -m "blablabla..."可以指定标签信息;
* git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
* 命令git tag可以查看所有标签。



* git push origin <tagname>可以推送一个本地标签;
* git push origin --tags可以推送全部未推送过的本地标签;
* git tag -d <tagname>可以删除一个本地标签;
* git push origin :refs/tags/<tagname>可以删除一个远程标签。

配置别名配置别名其实就是把命令重新设置简单些,方便输入,例如:如果输入git st就表示git status。

1. $ git config --global alias.st status

现在都用co表示checkout,ci表示commit,br表示branch:

1. $ git config --global alias.co checkout
2. $ git config --global alias.ci commit
3. $ git config --global alias.br branch

–global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。

搭建Git服务器搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。
假设你已经有sudo权限的用户账号,下面,正式开始安装。
第一步,安装git:

1. $ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

1. $ sudo adduser git

第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

1. $ sudo git init --bare sample.git

  Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

1. $ sudo chown -R git:git sample.git

第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

1. git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

1. git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

1. $ git clone git@server:/srv/sample.git
2. Cloning into ‘sample‘...
3. warning: You appear to have cloned an empty repository.

管理公钥和管理权限管理公钥  如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
管理权限  有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。
主要两点:

* 要方便管理公钥,用Gitosis;
* 要像SVN那样变态地控制权限,用Gitolite。

Git教程

标签:

原文地址:http://blog.csdn.net/u012868077/article/details/51931364

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!