Git教程

来源:互联网 发布:加工中心铣槽编程 编辑:程序博客网 时间:2024/06/18 15:40

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。 Git 与 SVN 区别点:

  • 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。

  • 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。

  • 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。

  • 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。

  • 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

安装

windows下安装

windows下安装很简单,下载安装就行了,下载地址

linux下安装

1、Debian/Ubuntu Git 安装命令为:

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \  libz-dev libssl-dev$ apt-get install git-core$ git --versiongit version 1.8.1.2

2、 Centos/RedHat 安装命令为:

$ yum install curl-devel expat-devel gettext-devel \  openssl-devel zlib-devel$ yum -y install git-core$ git --versiongit version 1.7.1

Git工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。

  • 如果其他人修改了,你可以更新资源。

  • 修改后,更新资源,合并后, 提交修改。

  • 提交修改后,如果发现错误,可以撤回提交并再次修改并提交。

Git命令

gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。你可以去注册一个github账号,然后创建一个项目,用本地git上传你的资源。

随便找个目录,点击右键,然后单击 Git Bash Here 进入git命令行工具

常用命令(简单了解,好多命令一般用不着)

git add xxx.txt         添加该文件git add .               添加所有文件git commit -m "message" 提交到本地git仓库git status              查看状态git diff                查看仓库提交前差异git log                 查看所有版本详情git log --graph         查看分支图git log --oneline       查看简洁版提交记录(只查看记录commitId)git reset --hard HEAD^  回到上一版本git reset -- 36.... by commitId(即版本号,输入前几位即可)cat xxx.txt             查看内容git reflog              查看日志记录git checkout -- xxx.txt 清除所有修改rm xxx.txt              删除git rm                  确认删除,并且git commitgit clone url           克隆资源git checkout -b dev     创建并切换到dev分支git branch              查看所有分支git merge dev           把dev分支合并到mastergit pull                把github最新提交抓下来git push                把本地的修改推到githubgit rebase -i HEAD~2   合并多次提交记录git stash changes       隐藏本地的改变,pull完了一定不要忘记 git unstash changes,恢复你刚隐藏的改变。如果希望保留生产服务器上所做的改动,仅仅并入新配置项:git stashgit pullgit stash popgit config --global user.name "用户名"git config --global user.email "邮箱"git config --global credential.helper store 保存Ctrl+c      退出,进入下一命令行(大概就是这个意思,你试试效果就知道了)

这只是一部分git命令,如果想详细了解,可以自己去查资料

更新和提交

1、配置全局的name和email,这里是的你github的name和email

$ git config --global user.name "你的用户名"$ git config --global user.email "你的邮箱"$ git config --global credential.helper store //保存

2、从github克隆项目

git clone url

克隆路径有两种,一种是HTTPS,git登录即可;另一种是SSH,需要git设置钥。
https 和 SSH 的区别:

1、前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key,否则无法克隆。

2、https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSHkey的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

git设置密钥:

输入指令,进入.ssh文件夹

cd ~/.ssh/  

如果提示 “ No such file or directory”,你可以手动的创建一个 .ssh文件夹即可:

mkdir ~/.ssh  

生成key

ssh-keygen -t rsa -C "你的邮箱"  

连续按三次回车,这里设置的密码就为空了,并且创建了key。

Generating public/private rsa key pair.Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.The key fingerprint is:SHA256:sEzgbZ3Lc9kslQ1LdMhkrUvQLsNiHOuZLRm8nTvzG4s 1062100557@qq.comThe key's randomart image is:+---[RSA 2048]----+|    .      =*o.  ||   . o ....o+*.  ||    . =oo+ o+..  ||     + +B.+=+    ||      ooSX+=o.   ||        Bo+..    ||         . ..    ||          +. o   ||          E++.   |+----[SHA256]-----+

最后得到了两个文件:id_rsa和id_rsa.pub

打开Admin目录进入.ssh文件夹,用记事本打开id_rsa.pub,复制里面的内容添加到你github 的ssh设置里即可(在你的setting的SSH and GPG keys里面添加ssh key)

测试一下该SSH key

$ ssh -T git@github.com

当你输入以上代码时,会有一段警告代码,如:

The authenticity of host 'github.com (207.97.227.239)' can't be established.# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.# Are you sure you want to continue connecting (yes/no)?

这是正常的,你输入 yes 回车即可。如果你创建 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:

Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

当然如果你密码输错了,会再要求你输入,直到对了为止。

密码正确后你会看到下面这段话,如:

Hi username! You've successfully authenticated, but GitHub does notprovide shell access.

3、更新和提交

git add xxx.txt   添加xxx文件git add .   提交所有文件(不包括忽略文件)git commit -m "提交的描述信息(必写)"     提交到本地git仓库git push   把本地提交推到github上git pull   更新本地资源(即把github资源拉下来)

更新和提交有两种方法

方法1:

git stash  隐藏本地的修改git pull   下拉资源git stash pop 恢复本地隐藏和下拉资源合并如果合并后有冲突,修改冲突,然后提交git add .  添加所有文件git commit -m "message" 提交到本地git push   推到github

方法2:

git add .  添加所有文件git commit -m "message" 提交到本地git pull   下拉资源如果合并后有冲突,修改冲突,然后提交git add .  添加所有文件git commit -m "message" 提交到本地git push   推到github

这种方法会出现两次提交记录(输入命令 git status 会看到两次本地有两次提交),如果不嫌麻烦可以把这两次提交记录合并为一条:

git rebase -i HEAD~2

进入文本编辑页面,将第二个pick改成squash或者s,然后保存退出。如下:

pick c6e4557 create second.txts e1a7dfa add text in second.txt

这样这两次提交就合并为一次提交记录了
提示:个人感觉方法二有点麻烦或提交记录不简洁,建议用方法一。

版本回退

有时修改的内容不想要了,修改的东西有点多,不好改回去,怎么办?回退上一版本即可

先查看本地提交记录:

git log 

commit 7f0adef13054ab36a6013944c185e2a62b2ca462 Author: username
< email> Date: Thu Aug 3 10:22:25 2017 +0800

second

commit cefb64b5eb3903c497b63c29424d6968b8838447 Author: username
< email> Date: Thu Aug 3 10:09:30 2017 +0800

secondsecond

commit 66fe6b87f2474fe8c325f81901bc57d92376cb5c Author:
username
< email> Date: Thu Aug 3 09:17:27 2017 +0800

frist

以上是你的本地git提交记录,commit后面是版本号

回退到上一版本:

git reset --hard HEAD^   回到上一版本

回退到指定版本:

git reset -- 66fe6b8   回退到指定版本,版本号输入前几位即可

撤回提交

有时提交到本地git后,发现机密信息被提交;或者把冲突提交,并且github有更新,这时即不能push也不能pull,出现这些情况时,我们不要强推,强推可能把别人的push覆盖,我们可以撤回提交,恢复修改代码。

仅仅撤回commit操作,代码仍然保留:

git reset --soft HEAD^

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

撤回有这几个参数:
–mixed
不删除工作空间改动代码,撤销commit,并且撤销git add . 操作,这个为默认参数,git reset –mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

–soft
不删除工作空间改动代码,撤销commit,不撤销git add .

–hard
删除工作空间改动代码,撤销commit,撤销git add . 完成这个操作后,就恢复到了上一次的commit状态。

设置忽略特殊文件

有些特殊文件我们不需要上传到远程仓库中,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

.gitignore文件对其所在的目录及所在目录的全部子目录均有效。通过将.gitignore文件添加到仓库,其他开发者更新该文件到本地仓库,以共享同一套忽略规则。

仓库目录下新建一个名为.gitignore的文件

因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git Bash,按照Linux的方式来新建.gitignore文件。

vim .gitignore

这样就可以在仓库目录下新建一个名为.gitignore的文件,并且进入编辑。不会用linux的vim,可以查看我的一篇博客这里面介绍了vi的简单用法(vim是vi的升级版)

.gitignore忽略规则

*.a       # 忽略所有 .a 结尾的文件!lib.a    # 但 lib.a 除外/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODObuild/    # 忽略 build/ 目录下的所有文件doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

忽略失效

如果第一次提交,没有设置好忽略文件,后期再加,这时忽略会失效,解决办法是把本地的要忽略的文件删除,然后上传,就可以了。

总结

这篇文章只是简单介绍了平时常用的几个功能,还有git的分支什么的等等,没有介绍,如果你感兴趣,自己可以去查查资料,研究一下。