git使用入门

来源:互联网 发布:足疗店软件 编辑:程序博客网 时间:2024/06/06 04:25

Git使用说明

Git简介

Git是分布式版本控制系统,首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。实际开发中,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

Git安装

1.去官网下载最新的下载包,安装完成后,开始菜单里找到“Git”->“Git Bash”(或者右键git bash here),

2.在命令行中输入:

$ git config --global user.name "Your Name"

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

目的主要是记录你的机器的姓名、邮箱,方便大家了解是谁。

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

git版本库


一.创建版本库:

首先在选定某个盘符(上图:F),创建一个空目录,右键git bash here,输入下列命令:

$ mkdir repository

$ cd repository

$ pwd

/f/repository/repository

Pwd命令的作用是显示当前目录的路径,windows系统下,目录不要用中文。

其次输入命令:

$ git init

Git就把仓库建好了,而且告诉你是一个空的仓库,这个仓库中会有个.git目录,这样目录是git跟踪管理版本库的,所以不要随意动。

Git并没有严格的权限管理控制,svn则有严格的权限管理,可以按组、按个人进行针对某个子目录的权限控制

二.添加文件到版本库:


在空的版本库下创建一个txt文件(不要用记事本,统一编码),添加两行文字,并保存:


第一步,用命令gitadd告诉Git,把文件添加到仓库:

$ git add readme.txt

第二步,用命令gitcommit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"


三.修改文件并提交到版本库

修改readme.txt文件,保存前运行git status命令(获取当前文件的状态):


修改后保存,运行命令gitdiff,可以查看具体修改的内容:


使用add,commit命令添加提交修改后的文件到仓库:


四.文件版本的退回


命令git log(git log –pretty=oneline),可以查看当下文件提交的各个版本信息:(注:此命令只能看到当前状态及之前的版本号)



Git使用128位ID作为版本号,而svn使用一个递增的序列号作为全局唯一的版本号。

 

命令:git reset --hard7009(版本号的前若干位),

git reset –hard HEAD(HEAD^/HEAD^^/HEAD~100),这个命令的作用是将当前的文件的版本退回到某个版本状态下。HEAD代表当前版本,^代表前一个版本,~100代表前一百个版本。


命令git reflog可以查看版本回退操作历史,版本信息:


五.工作区&暂存区

工作区就是在电脑里能看到的目录(隐藏的目录不是),例:我们刚开始创建的repository。

创建版本库后,git的版本库中会有一个暂存区stage,和一个版本指针HEAD,一个版本库自动创建的分支master。其中指针指向分支master。

Svn中没有暂存区,提交代码直接提交到分支上,即版本库中的另外的一个目录。


第一步是用git add把文件添加进去,实际上就是把文件(新增/修改)添加到暂存区;

第二步是用gitcommit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

说明:无论对工作区的文件内容进行了多少次修改,如果没有add到暂存区,那么commit的时候是不会把工作区修改的内容提交到分支上的。

命令:catreadme.txt作用是查看工作区中readme.txt文件的内容。

命令:git diffHEAD -- readme.txt的作用是查看工作区和版本库里面最新版本的区别。

六.撤销修改:

场景1:丢弃工作区的修改时,用命令git checkout -- file

场景2:丢弃暂存区的修改时,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交修改到版本库时,想要撤销本次提交,可以进行版本的回退,不过前提是没有推送到远程库。

Svn的撤销修改比较简单,直接同步资源库即可。

七.删除文件

通过命令: git rm删除,git commit更改。可以把版本库中的文件删除。


如果只是误删工作区的内容,则可以使用git
 checkout命令获取最新的版本库内容。

远程仓库

关联远程仓库:$ gitremote add

本地库的内容推送到远程库:$git push 远程库名分支名(首次$ git push-u origin master)

克隆远程仓库:$ git clone



要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆


 

GIT跟SVN一样有自己的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库,.git目录是处于机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

分支合并

与svn的分支不同,git的分支是在同一目录下可以建立多个分支,不同分支之间可以进行互相合并,这样的好处就不容易有遗漏的未合并的分支。Svn的分支是单独存在一个目录下面的,这样不仅合并缓慢,而且容易出现遗漏。因为svn合并的时候想通过不同目录文件的对比,而git是通过HEAD指向不同的分支,以指向的分支为基础来进行合并,无主次之分。


Git的提交是以时间为基准串联成一条线的。可以在此线上建立多条分支。Master分支为默认主分支。当前的HEAD通过指向不同的分支使工作区提交到建立分支进行开发,代码开发提交后,合并到主分支上,之后删除分支。如图:



冲突解决


当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。



分支管理策略


使用fast forward模式合并分支的时候会删除分支的信息,为了避免这种情况,强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。Svn进行合并的时候,会详细记录合并的历史信息。从这个方面来看svn要比git更简单明了,容易追溯历史修改版本。

 



BUG处理


Svn中处理bug直接在目录文件中修改,然后提交到分支中,不会影响现有功能的开发。git中处理bug的方式不一样,如果当前正在开发,那么在此分支上修改bug 会影响现有功能的开发,合并的时候会把现有的分支上的代码一起合并。所以需要通过stash功能把现有的分支隐藏起来,然后新建分支修改bug,修改完成后再切换到开发分支进行开发。

 


多人协作

首先,可以试图用gitpush origin branch-name推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“notracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

Git标签

Svn的版本标签是任何对应时间的源码的快照,Svn可以有全局的版本号。

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针,是对某个分支的状态打的标签。



应用案例

一.搭建服务器

将下载的Linux版本的git上传到服务器,安装命令:

CentOS:yum install git

Ubuntu: sudo apt-get install git

安装后创建新的用户,并且切换到当前用户,命令:

sudo adduser fcxgit


su fcxgit


然后创建秘钥:

命令:ssh-keygen–t rsa –P ‘’


将秘钥添加到authorized_keys中:

命令:catid_rsa.pub>>authorized_keys

~/.ssh/authorized_keys设置权限600:

命令:chmod 600authorized_keys

~/.ssh 设置权限 700:

命令: chmod 600authorized_keys


至此服务器搭建完成。

创建仓库,远程链接,克隆仓库

命令:mkdir github

         cd github

         mkdir learngit

         cd learngit

         git --bare init

至此仓库建好了,远程链接为:


ssh://fgit@218.244.131.231:18016/home/fgit/github/learngit


用户无密码ssh访问仓库的话,需要将公钥添加到authorized_keys


用户获取公钥:

Git命令:ssh-keygen-t rsa -C “用户邮箱
3个回车,密码为空。

然后将公钥(id_rsa.pub中的内容)复制到服务器的thorized_keys


命令:vi thorized_keys

}

i

粘贴

Esc

:wq

保存完成后,与服务器进行通信的时候就不会有密码限制了。

克隆服务器仓库:

git clone ssh://fgit@218.244.131.231:18016/home/fgit/github/learngit

连接远程仓库:

git remote add origin ssh://fgit@218.244.131.231:18016/home/fgit/github/learngit


git基本使用:

创建文档,编辑提交,到远程服务器:

命令:

cd learngit

git add demo1.txt

git commit –m “add demo1.txt”

git fetch origin master:tmp

git diff tmp

git merge tmp

git push origin master


分支和文件的添加一样,分支的删除命令:

git push origin :dev

更新代码到本地:

首先将本地修改的所有代码都提交到本地的对应分支上,然后更新远程仓库的代码,二者合并,解决冲突。

命令:

         git add demo1.txt

         git commit –m “dd”

git fetch origin master:tmp

         git diff tmp

git merge tmp

git add demo1.txt

git commit –m “解决冲突”

         git branch –d tmp

        


本地修改代码后,提交到远程仓库:

命令:

git add demo1.txt

git commit –m “g demo1.txt”

git fetch origin master:tmp

git diff tmp

git merge tmp

git push origin master


git branch –d tmp

 

bug处理:

目前正在开发的分支中有添加到暂存区的文件,但是没有提交到分支上:

命令:

git stash:隐藏分支

git checkout master:切换需要修改bug的分支

git checkout –b bug_01:创建bug分支

git add demo1.txt:修改完成后天bug到暂存区

git commit –m “bug demo1.txt”:提交bug到bug_01分支

git checkout master:切换到存在bug的分支

git merge –no-ff –m “g bug demo1.txt” bug_o1:合并bug分支

git branch –d bug_o1:删除bug分支

git fetch origin master:tmp:更新远程代码到本地

git diff tmp:对比本地代码和远程代码的区别

git merge tmp:合并远程代码到本地代码

git push origin master:提交本地代码

git branch –d tmp:删除tmp分支

git checkout dev:bug修改完毕,返回到正在开发的分支dev

线上版本回退:

git reset –hard 版本号

重启服务

线上分支添加,删除

 

 

 

0 0
原创粉丝点击