一、简介GIT
SVN:集中式版本控制,只有服务器上面才有资源仓库,断网情况下不能使用
GIT:分布式版本控制,客户端和服务器上面都有资源仓库,而且相同,断网情况下可以使用,断网情况下,同样可以提交代码,联网的时候只需要push到服务器
二、GIT的工作模型
三、GIT基本交互流程图
四、GIT安装
1. 点击Git-1.7.9-preview20120201.exe进行安装
2. 安装到D:\software\Git(建议目录)目录下,手工建立这两个目录,
3.Select Component(默认选项)
4.
5.
6、安装完毕之后,在桌面会出现Git Bash图标,双击!
安装完成
五、GIT仓库操作
1.在D:\software
目录下面创建一个文件夹repository
(仓库),在建立一个git
目录,则将git
中央仓库放在D:\software\repository\git
下面了
2.进入中央仓库,点击鼠标右键,选择,Git Bath
3. git init --bare shared.git
(新建一个空的中央仓库shared.git)
就会在D:\software\repository\git
下面创建一个shared.git目录,里面有一系列的文件夹
①D:\software\repository\git\shared.git\hooks
下面有一些钩子程序
pre-commit.sample
: 表示代码提交之前的程序
post-commit.sample
: 表示代码提交之后的程序(给项目经理发邮件之类的)
②D:\software\repository\git\shared.git\info\exclude
这个文件中内容是配置你自己不需要进行版本控制的文件的的
③D:\software\repository\git\shared.git\objects
这个目录里面存放的是提交的内容,(但是在这个文件夹里面是找不到的)
④D:\software\repository\git\shared.git\config
进行系统的GIT相关配置
4、新建目录F:\develope\workroom
模拟客户端本地代码仓库,并创建两个新的员工user1和user2
5、克隆中央仓库到user1中,
①打开F:\develop\workroom\user1
②在此目录下面,打开git bath
③git clone /f/software/repository/git/shared.git/
. (注意有个点,表明当前目录)
然后就会在F:\develop\workroom\user1
中多一个隐藏的文件夹.git(本地仓库)
里面的内容和中央仓库内容一样!!!
6. 第三步:设置个人信息
-git config user.name "user1"
-git config user.email "[email protected]"
经过上面的两行代码,就将用户的信息写到了user1/.git.config
文件中了
7. 进行代码的开发了
8、告诉git对哪个文件进行跟踪
9.提交index.jsp文件到本地代码仓库:
① git commit
②进入了编辑模式,然后按i键键入插入模式,输入备注信息:user1 add the file
③按esc键进入编辑模式,然后键入::wq 保存退出则成功提交了!
10.将本地代码仓库PUSH到中央仓库
git push origin master
git clone /D/software/repository/git/shared.git/ .
然后就克隆进user2
中了!!!
12. 查看user2
中index.jsp
中的内容
13.user2
告诉git
它是谁
git config user.name ‘user2’
git config user.email ‘user2@163.com’
14.编辑index.jsp
vim index.jsp
进入编辑模式,并进行更改,查看更改内容
15. 通过add将index.jsp添加到缓存区
git add index.jsp
16.commit提交
git commit -m “user2 update” //提交并通过-m添加备注信息
17. push到中央仓库
18.user1
从中央仓库pull源代码,并查看index.jsp
的内容
-git pull
-cat index.jsp
==============版本管理员操作========================
第一步: 创建数据仓库
git init --bare shared.git
==============开发人员1操作=============================
第二步:复制仓库到本地
git clone /f/software/repository/git/shared.git/ . (注意有个点,表明当前目录)
第三步:设置个人信息
git config user.name "user1"
git config user.email "[email protected]"
第四步:忽略无需版本控制的文档
echo "*.txt" > .gitignore
第五步:新建一个文件
echo "User1 add content" > index.jsp
第六步:提交文件
git add index.jsp
git commit -m "User1 add the file"
第七步:把自己的仓库提交到公共服务器
git push origin master
==============开发人员2操作=============================
第八步:复制仓库到本地
git clone /f/software/repository/git/shared.git/ .
第九步:设置个人信息
git config user.name "user2"
git config user.email "[email protected]"
第十步:忽略无需版本控制的文档
echo "*.txt" > .gitignore
第十一步:新建一个文件
echo "User2 add content" >> index.jsp
第十二步:提交文件
git add index.jsp
git commit -m "User2 add the file!"
第十三步:把自己的仓库提交到公共服务器
git push origin master
==============开发人员1操作=============================
第十四步:下载服务器最新数据
git pull
六、GIT相关概念
1、工作区
2、暂存区
3、版本库
4.日志命令
-git log --pretty=raw
-git cat-file -t 6d14ef
-git cat-file -p 6d14ef
6.查看tree对象的值
7. 查看blob对象的内容
8、版本结构图、
9、探究head和master分支
七、Tortoisegit
(1)Tortoisegit
的安装
第一步、点击TortoiseGit-1.7.7.0-32bit.msi-- >Next
第二步、
第三步、点击insatll进行安装,然后Finish
第四步、测试是否安装成功:点击鼠标右键,有过有响应的选项即证明安装成功
(2)、将上面五中的内容进行一个修改,用TortoiseGit
进行实现
1.将D:\software\repository\git
中的内容全部删除, 将F:\develop\workroom
中的user1
和user2
全部删除
2. 对中央仓库进行初始化
2.1 D:\software\repository\git
点击鼠标右键,点击Git Create repository here
2.2 按照上面的方法初始化以后发现,直接生成了各类文件,我们期待的是生成一个shared.git文件夹
怎么做?首先要先建好文件夹shared.git,然后在该文件夹下面初始化!!!
3.在F:\develop\workroom
下面分别建立user1
和user2
文件夹
4.将中央仓库的内容克隆到user1
中
进入user1
– >鼠标右键Git Clone
– >进行下列设置
5. 在F:\develop\workroom\user1
下面创建一个文件index.jsp,
然后用记事本打开,写上:
user1 add file
6. 在F:\develop\workroom\user1
下面点击鼠标右键– >TortoiseGit
– >settings
点击应用,确定
7. 选中index.jsp
,点击鼠标右键,– >TortoiseGit
– >Add..
– >选中index.jsp
– >OK
– >OK
(这样就将index.jsp
纳入版本控制了)
8. 选中index.jsp
,点击鼠标右键:– >Git Commit
- >”master”
9.
10. 发现index.jsp的图标变为:
表示提交成功了!!!(注意:是提交到本地仓库里面了,即F:\develop\workroom\user1\.git
)
11、将本地的仓库push到中央仓库:
11.1 在F:\develop\workroom\user1\
下面点击鼠标右键– >TortoiseGit
– >push
11.2 上面的push
可以直接添加到鼠标右键弹出的菜单中:
TortoiseGit
– >settings
– >General
– >Context Menu
– >选中pull
和push
12.user2
的工作:
12.1 Git Clone
12.2 设置user2
的信息:
F:\develop\workroom\user2
– >鼠标右键–> TortoiseGit
–>setting
–>Git
设置的信息放在了F:\develop\workroom\user2\.git\config
文件里面
12.3 将index.jsp中的内容改为:
user1 add file
user2 update file
表示修改过,尚未提交
12.4 将修改后的文件提交到user2的本地仓库中,注意,这里的图形界面不用add,直接在图标上面点击鼠标右键– >Git commit
–>”master
”,增加备注信息。
12.5 将user2
的本地仓库push
到中央仓库在F:\develop\workroom\user2
点击右键:Git push
– >OK
13. 打开:F:\develop\workroom\user1
– >鼠标右键– >Git pull
则完成了
(1)、显示的情景分析:
1. 首先,user1和user2分别从中央仓库里面clone了相关内容到各自的本地仓库,然后分别修改index.jsp
2. user1
2.1 user1将index.jsp修改为:user1 update the index.jsp
2.2 user1将index.jsp纳入版本控制,并提交到本地仓库
2.3 user1将本地仓库push到中央仓库
3. user2
3.1 user2将index.jsp修改为:user2 update the index.jsp
3.2 user2将index.jsp纳入版本控制,并提交到本地仓库
3.3 此时的user2无论是push或者pull到中央仓库都会发生冲突了conflict!!!并且pull
index.jsp的图标变为:
(冲突图标)
原因:因为刚刚两个人都修改了index.jsp的同一行都进行了修改操作,但是,如果修改的是不同的行,
那么就不会发生冲突了
解决:选中冲突文件– >右键– >TortoiseGit
– >Edit conflicts
– >会出现一些响应的文件:
index.jsp.LOCAL.jsp
:本地最新版本的
index.jsp.REMOTE.jsp
: 别人push到中央仓库的,中央仓库最新版本的
index.jsp.BASE.jsp
: 我本地没有修改时的内容
①.比较Therirs
和Mine
面板上面的内容,从Merged
面板可以看出第一行和第二行不用整合,第三行需要整合,此时,在Mine
面板上面选中飘红的行(第三行),点击鼠标右键,出现下面四行内容:
Use this text block : 表示就使用这样的整合
Use this whole file
Use text block from ‘mine’ before ‘theirs’:将我的内容放在他们内容的前面
Use text block from ‘theirs’ before ‘mine’
选择第三行或者第四行就行了!!
②、点击左上角的保存按钮,
③、告诉Git我已经解决完了冲突了!
在冲突的文件上面点击鼠标右键– >TortoiseGit
– >Resolve
– >OK
,则原来的一系列文件就会
消失了
④. 提交index.jsp
到本地仓库,然后push
到中央仓库
4. 进入到user1
的目录下,pull
下中央仓库的内容,发现整合完毕!
(4)、显示工作中,要定期push和pull,上班前pull,下班前push
(5)、怎样看一个文件的修改记录呢?以上面的index.jsp为例:
在任何一个user下面选中index.jsp,点击右键,– >TortoiseGit– >Show log
(6)、将该文件与前一个相对比:
TortoiseGit
– >Diff with previous version
(7)、我们编辑完一个文件提交到本地仓库之后,比如index.jsp
,一般不会立即push
到中央仓库,而是,先检查一下是否有人push
过了,怎么检查呢?
选中index.jsp-
- >TortoiseGit
– >check for modifications
– >refresh
即可
如果有人已经push过了,就先将中央仓库pull
下来!!!
八、Git与Eclipse的整合(给Eclipse装插件)
(1) 选择Help
- >Install New Software
(2) 点击”Add”选择安装文件,zip文件
(3)
(4) Next
– >Next
– >I accept…
– >Finish
(5)
(6) 重启eclipse
(7)查看插件是否安装好了?window
– >Preference
– >Team
– >展开是否有Git
九、在eclipse下面操作git
(1)进入Git Repository Exploring
(2)选择:Clone a Git repository
(3)
(4)Next
(5)点击Finish
(6)怎样将上面的user3导入到java面板中呢?
在user3上面点击鼠标右键,– >Import Projects
(7)Next
– >Finish
–>则将该项目放到了java面板当中
(8)设置用户信息:
Perferences– >Team– >Git – >Configuration– >New Entry,分别设置
user.name和user.email
(9)修改index.jsp
user2 update the index.jsp
user1 update the index.jsp
user3 update the index.jsp
(10)在Index.jsp
上面点击鼠标右键,Team
– >Add to Index
(将index.jsp纳入git版本控制)
(11)提交到本地仓库:选中index.jsp– >Team– >Commit
点击Commit
;
(12)push
:选中user3
– >Team
– >Remote
– >Push
– >Next
(13)Finish– >OK
(14)校验是否push成功:
进入F:\develop\workroom\user2
,Git pull
一下查看index.jsp
的内容即可!!
(15)在index.jsp
上面点击鼠标右键,在Team
下面有Compare With
和Replace with
(可以恢复成以前每次修改时的状态)
(16)在Git Repository Exploring
面板下:
(17)注意:在Eclipse中只能给一个用户设置信息:user.name
和user.email
等等,其他用户的信息设置不能在Eclipse
中操作
(18)edit
在eclipse
下面解决冲突的方法:
1.新建user3 user4,都修改了index.jsp
,user3push到中央仓库,user4push的时候出现冲突!
2. 在出现冲突的文件上面点击鼠标右键,– >Team
– >Merge Tool
– >在弹出的对话框中选择第二个,–》OK
3.选中user4下面的问题index.jsp
– >Team
– >Add to Index
,整合完毕,然后commit
,push
十、topSSH远程版本控制
1. 安装topSSH
2.
十一、分支:
1.实际开发中一般不会使用master分支进行开发,应该首先提交到develop分支上面去,到了稳定的阶段才会push到master分支上面
2.产品实际开发过程中走的流程:
案例:
1.给新项目建立一个中央仓库,在D:\software\repository\git
下面新建一个文件夹Apollo.git,打开文件夹,新建一个空仓库(共享仓库)
2.在Eclipse
中克隆下中央仓库
3.创建F:\develop\workroom\Apollo
文件夹,并在当中使用TortoiseGit
克隆上面的仓库,并且里面有一个index.jsp
,并插入:HelloWorld!!!
然后,add,commit,push,这时即有了基础代码了
4.回到eclipse界面,克隆中央仓库,到F:\develop\workroom\Apollo(要首先删除原来的用户)
5.import projects
,然后进入java面板,将index.jsp修改如下:
HelloWorld!!!
Function 1;(ApolloV1.0)
然后–add–commit–push
6.发布v1.0: (打Tag):选中Apollo– Team–Advanced–Tag
6.新建一个分支,选中工程名称–Team
–Switch to
–New Birtch
点击Finish自动切换成develop分支!!!
7.进行2.0的开发(基于develop分支):
在工程Apollo下面打开index.jsp,修改如下:
HelloWorld!!!
Function 1;
Function2;
Fuction 3;
这时候表示V2.0已经开发到一半了!!!
8.V1.0发现了Bug,要去修复,所以现在要暂时停止v2.0的开发,将开发中的2.0,commit,
9.找到1.0的代码进行修复,所以要切换,在工程名上面点击右键–Team
–Switch To
–other
–选中V1.0
–New branch
–Branch name:V1.0_fixup
点击Finish,工程切换到Apollo V1.0_fixup,查看此时工程下面的index.jsp:
HelloWorld!!!
Function 1;
10、解决bug:将上面的代码修改为:
HelloWorld!!!Nihao.
Function 1;
然后add
–commit
(备注写上”fixup”)
11. 马上发布一个V1.1:
选中工程–Team–advanced–Tag
12. 把刚才修复的bug整合到刚才暂停的V2.0当中,选中工程名,切换到develop分支!
13. 整合,选中工程名称,–Team–Merge–Tags–V1.1(或者–Team–Merge–Local–V1.0_fixup),至此,整合完毕!!