Git使用笔记

@date:2014-09-15 22:28:00

git是分布式版本管理工具。Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行。git不区分服务端和客户端,也就意味着,当你安装好了git,客户端和服务端都有了。

 

本文以github为例讲解如何使用git。

更多内容详见github:

52fhy/gitlearn: 这是初次学习git的一些笔记,可以帮助新手快速入门。
https://github.com/52fhy/gitlearn

 

如何在公司快速使用git协作

如果之前没有接触过git,公司里使用git协作,为了快速能用起git,你不用去学git,只要会下面的命令即可。

需要克隆项目:

git clone git@github.com:52fhy/gitlearn.git

记得替换成实际的项目路径。

之后每天只要使用下面4条命令即可:

git add .
git commit -m "备注"
git pull 
git push

记住顺序不能乱,pull之前先提交本地到版本库,防止被拉下来的代码覆盖;提交之前先拉线上的代码下来进行合并,防止冲突。

pull拉取线上代码到本地并执行合并,相当于执行了git fetch;git merge; push推送本地(默认是master分支)到线上并合并,注意观察是否有冲突。有冲突必须手动修改,再从头执行一遍。

每天基本上就上面4条命令就足够了。

如果第一次你还没有ssh公钥,现象就是你克隆不了,没有权限。如果本地的用户目录下面没有.ssh目录没有 id_rsa.pub公钥文件,需要新建公钥私钥:

$ ssh-keygen -t rsa -C "youremail@example.com"

接下来一路回车即可。


1、第一次使用github

1)github注册账号,网址:https://github.com/
使用邮箱注册账号

先不要创建版本库

 

2)安装git

Linux请参考网上教程,这里演示windows操作。

实际命令行操作基本是一样的。


 msysgit 是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。

官方下载比较慢,可以使用第三方下载点:Git-2.7.2-32-bit_setup.1457942412.exe

安装完成后,在开始菜单里找到"Git"->"Git Bash",蹦出一个类似命令行窗口的东西,就说明Git安装成功!

说明:git命令操作和Linux命令差不多,很多命令可以直接使用,比如cd,vi

 

3)安装完成后,还需要最后一步设置,即配置本地git用户名和邮箱。在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

 

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

 下次重新使用这两个命令可以更新用户名和邮箱。

通过 git config -l  可以查看已有的配置。

 

4)创建SSH Key

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub(公钥)这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

其中-t指定rsa加密;-C是备注,可选。

会让你输入 .ssh/id_rsa 文件的路径,默认即可
然后输入自定义私钥密码(下次用来确认你的身份),确认即可:

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/YJC/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/YJC/.ssh/id_rsa.
Your public key has been saved in /c/Users/YJC/.ssh/id_rsa.pub.
The key fingerprint is:
xx:80:50:0f:25:xx:c8:f1:3c:fe:5e:90:be:9d:d5:xx

 

注意:

如果由于其他原因导致git提交时提示 Could not create directory '//.ssh'. ,可以删除之前的id_rsa文件,重新进行:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ ssh-keygen -t rsa -C "youremail@example.com"

windows上id_rsa文件位于用户主目录:C:/Users/YJC/.ssh/

id_rsa
id_rsa.pub

当提示 Enter file in which to save the key (//.ssh/id_rsa): 默认可以为空,如果不行,输入:C:/Users/YJC/.ssh/id_rsa

当提示

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

输入一个密码即可。下次提交代码会让你输入密码。

 

5)登陆GitHub,打开"Account settings","SSH Keys"页面:
然后,点"Add SSH Key",填上任意Title,在Key文本框里粘贴 id_rsa.pub 文件的内容:

  为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
  当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

 

6)创建本地版本库(我选的D盘)

$ cd /d/phpsetup/www/git/
$ mkdir fhyblog
$ cd fhyblog
$ pwd

/d/phpsetup/www/git/fhyblog

 

7)通过 git init 命令把这个目录变成Git可以管理的仓库:

$ git init

Initialized empty Git repository
in /Users/52fhy/fhyblog/.git/

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个 .git 的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

 

注意几个概念:

工作区就是创建仓库的文件夹如(fhyblog文件夹就是一个工作区) 
版本库就是工作区的隐藏目录.git
版本库中有暂存区(stage
/index)和分支(master)
git add 实际是把文件添加到暂存区
git commit 把暂存区的内容提交到当前分支

 

8)在本地版本库fhyblog里放入一些代码或文件

  我放了src目录和一个readme.txt文件

  git status  可以查看工作区有改动。

9)进入版本库目录:

$ cd /d/phpsetup/www/git/fhyblog/

 

10)更新本地版本库(.指当前所有目录及文件)

$ git add .

当然,如果你仅仅是提交一个文件,可以这样写

$ git add readme.txt

更新一个目录这样写:

$ git add src/

此时还没有真正提交到版本库,只是从工作区放到暂存区。提交请继续往下看:

 

11)执行更新操作:

$ git commit -m "相关说明"

[master 91115af] .
1 file changed, 53 insertions(+) create mode 100644 "\345\215\207\347\272\247\346\227\245\345\277\227.txt"

这样就提交到了本地版本库的master分支(默认)。通过 git log 可以查看提交记录,通过 git status 可以查看工作区情况。 

 

一般情况,如果是个人开发,主要就是 git add 命令和 git commit 命令:提交更改至暂存区,然后提交到分支。

如果是团队协作,需要统一在远程版本库交换更改,就要用到 git pull 和 git push 命令了。

注意:git本身并不依赖远程版本库,这点和svn不一样。远程版本库的作用是方便交换更改,如github。

 

12)更新至远程(Github):

要关联一个远程库,使用命令 

$ git remote add origin git@github.com:yourname/yourgit.git 

关联后,使用命令 

git push -u origin master

进行第一次推送master分支的所有内容;

所以,远程github上确保你的版本库是空的,否则你在这一步可能会不成功。

此后,每次本地提交后,只要有必要,就可以使用命令 git push origin master 推送最新修改;

 

$ git push origin master

Warning: Permanently added the RSA host key
for IP address '192.30.252.129' to the list of known hosts. Enter passphrase for key '/c/Users/YJC/.ssh/id_rsa': Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 292 bytes | 0 bytes/s, done. Total 2 (delta 0), reused 0 (delta 0) To git@github.com:52fhy/fhyblog.git efe4969..91115af master -> master Branch master set up to track remote branch master from origin.

Admin@YJC

-PC /d/phpsetup/www/git/fhyblog (master)

 

如果完成到这里,恭喜你!你已经有了本地和远程版本库了。

 

注意:

origin 是默认的远程版本库名称(可以在 .git/config 之中进行修改)
git push origin master 的意思是 git push origin master:master (将本地的 master 分支推送至远端的 master 分支,如果没有就新建一个)

git push origin master和git push有什么区别?

1、master是主分支,还可以建一些其他的分支用于开发。
2、git push origin master的意思就是将本地的 master 分支推送至远端的 master 分支。git push是上传本地所有分支代码到远程对应的分支上。

master其实是一个“refspec”,正常的“refspec”的形式为”+<src>:<dst>”,冒号前表示local branch的名字,冒号后表示remote repository下 branch的名字。注意,如果你省略了<dst>,git就认为你想push到remote repository下和local branch相同名字的branch。


2、再次使用git
以后本地版本库里有更新,使用 git add  添加,使用命令 git commit 提交。
更新至远程使用命令 git push origin master 推送

git add .
git commit -m "update something..."
git pull 
git push

先git pull再git push防止覆盖他人代码造成冲突。

 

可以使用git status命令查看git仓库状况。


3、从远程更新至本地版本库
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

$ git clone git@github.com:52fhy/fhyBlog.git

Cloning into
'fhyBlog'... Enter passphrase for key '/c/Users/YJC/.ssh/id_rsa': remote: Counting objects: 284, done. remote: Compressing objects: 100% (238/238), done. remote: Total 284 (delta 28), reused 283 (delta 27)R Receiving objects: 94% (267/284), 644.00 KiB | 12.00 KiB/ Receiving objects: 100% (284/284), 676.81 KiB | 12.00 KiB/s, done. Resolving deltas: 100% (28/28), done.

 

其他:

忽略 .gitignore 已经跟踪的目录,如 dir/ :

git rm -r --cached dir

 

git别名

git可以配置别名,这样不用担心记不住命令了。

很多人都用co表示checkout,ci表示commit,br表示branch:

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

有人丧心病狂地把lg配置成了:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

 

使用 git lg 看看效果吧!

 

===写在后面===

本文仅是Git的基本使用,可以作为新手入门教程。更多Git相关操作,请参考:

1、Git教程,极力推荐,尤其是新手。本文就参考了该教程。

2、《Pro Git》一书,百度搜索吧;

3、Git官方教程

 

参考文档:

1、Git 使用及原理 总结 - 人间奇迹 - 博客园

http://www.cnblogs.com/yaozhongxiao/p/3794963.html

2、learngit/git学习笔记.md at master · michaelliao/learngit · GitHub

https://github.com/michaelliao/learngit/blob/master/Git%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/git%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.md

 

觉得有收获,记得推荐一下哦!

Build by Loppo 0.6.14