第一章 简介
1. 什么是版本控制系统
版本控制的意思是从一个文件创建到后面的文件的各种修改(不管是添加内容还是,删除内容)
都会被记录下来,以便后面查阅文件的各个版本。
2. 什么是Git?
git是一种分布式的版本控制工具。
3. 解决什么问题(应用场景)?
git用来解决代码(当然不仅仅是代码)的版本控制问题。
4. 同类技术有哪些?
5. 有哪些优缺点?
1)git每次都保存文件的整体快照,而svn则每次保存文件的差异;
2) 像SVN这种版本管理软件每次只是对代码最新版本的镜像,假如中央服务器
down机可能会丢失代码的历史版本。而且此时开发人员不能继续提交代码,进行同步协调开发。
3) Git的每一个本地仓库都是对中央仓库代码所有历史版本的完整镜像,所以完全可以在离线或者中央服务器down机的情况下继续开发,不用当心出现代码丢失的情况。
4) 所有的操作都可以本地执行,有网络的情况下再提交。
5) Git的分支非常轻便(svn需要创建代码的完整副本,git只需要创建一个指正)(使用方便)
6. 初次运行Git前的配置。
/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。
每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --list
第二章 Git基础
1. 初始化一个Git仓库
git init
git clone url my_git_name
2. 忽略规则
1)创建.gitignore文件
2)所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
3)可以使用标准的 glob 模式匹配。
4) 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
5) 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
6) *.class #忽略所有已Class结尾的文件
3. 查看文件差异(这边比较重要)
git diff HelloWorld.java //查看未暂存的文件和已经暂存的文件的差异,假如暂存区中没有这个文件,则是和上一次提交的版本对比。
git reset HEAD HelloWorld.java //将文件移出暂存区
git diff --cache HelloWorld.java //将暂存区中文件和上一次提交的版本做比较
4. 删除文件
1) git rm -f HelloWorld.java
git commit -m 'delete java'
2) git rm --cache HelloWorld.java //将文件不让git管理但是 还是保留文件
3)git rm xx/* //删除xx文件夹下的所有文件
5. 移动文件(重命名)
git mv HelloWorld.java Hi.java
6. 查看提交历史
1)git log
2)git log -p -2 //显示每次提交的差异,显示最近2次提交
7. 撤销操作相关
1)将文件移出暂存区 git reset HEAD HelloWorld.java
2) 将文件恢复到原来版本,相当于svn中的revert。
git checkout -- chen.txt
8. 远程仓库相关操作
1)git remote -v //查看远程仓库信息
2)添加远程仓库
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
3) 推送分支
git push origin master //将当前分支推送给master分支
9. 标签相关的
1)git tag //列出所有标签,标签可以有注释
2)git tag -a v1.0 -m '这是1.0版本'
3)git show v1.0 //查看1.0版本信息。
第三章 分支相关
1. 新建一个分支
git branch b_hello //新建了一个分支 但是不会自动切到这个分支上
2. HEAD指针的作用(图片) //用来记录你当前在哪个分支上面,我们也可以理解为是当前分支的别名
远程分支:origin/branch_name
3. git checkout -b b_hello //切换到b_hello分支,没有这个分支就创建一个
4. 分支合并(冲突解决)
git checkout master
git merge b_hello //将hello分支合并到master,merge相当于一次commit
上述合并可能会产生冲突,此时需要手动解决(打开master分支上的文件)
l am chensongxia
she is zhaoru
xxxxxxxxxxxxxx
<<<<<<< HEAD
vvvvvvvvvvvvvvccccwwwwwwwwc
=======
vvvvvvvvvvvvvvcccccxxxxxxxxxxxxxxx
>>>>>>> b_test_confict
手动合并之后 执行git add 然后commit就行
5. 删除分支
git branch -d b_hello
6. 查看分支信息
git branch -v
查看还没有和当前分支合并的分支
git branch --no--merge
7. 推送分支
git push origin b_name
git fetch origin
git pull
8. 跟踪远程分支
git fetch
git branch -a
git checkout -b b_name origin/b_name
9. 删除某个远程分支
git push origin :b_name (注意冒号前有空格)
10. 分支rebase
让分支提交的历史更加整洁干净。
总结:
这章主要讲了分支相关的内容,重点把握
1)HEAD指针、远程分支概念;
2)merge的原理图;
3)冲突解决;
4)命令流程:
git fetch
git branch -a
git merge origin/master
git checkout b_name
git merge master
第四张 服务器上的Git
1. 什么是裸仓库
裸仓库就是一个只包含.git目录的仓库,服务器上的git就是一个裸仓库。
2. Git支持的协议
本地传输协议、SSH协议、GIT协议、HTTP协议
3. 我们需要一个项目的拥有者给你添加写的权限,才能像项目推送代码。
假如我们没有写权限,可以fork一个项目,后面再提交pull request。
但是这样会有一个问题就是要怎么保证你fork的项目和原项目同步
1. 什么是版本控制系统
版本控制的意思是从一个文件创建到后面的文件的各种修改(不管是添加内容还是,删除内容)
都会被记录下来,以便后面查阅文件的各个版本。
2. 什么是Git?
git是一种分布式的版本控制工具。
3. 解决什么问题(应用场景)?
git用来解决代码(当然不仅仅是代码)的版本控制问题。
4. 同类技术有哪些?
5. 有哪些优缺点?
1)git每次都保存文件的整体快照,而svn则每次保存文件的差异;
2) 像SVN这种版本管理软件每次只是对代码最新版本的镜像,假如中央服务器
down机可能会丢失代码的历史版本。而且此时开发人员不能继续提交代码,进行同步协调开发。
3) Git的每一个本地仓库都是对中央仓库代码所有历史版本的完整镜像,所以完全可以在离线或者中央服务器down机的情况下继续开发,不用当心出现代码丢失的情况。
4) 所有的操作都可以本地执行,有网络的情况下再提交。
5) Git的分支非常轻便(svn需要创建代码的完整副本,git只需要创建一个指正)(使用方便)
6. 初次运行Git前的配置。
/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。
每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --list
第二章 Git基础
1. 初始化一个Git仓库
git init
git clone url my_git_name
2. 忽略规则
1)创建.gitignore文件
2)所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
3)可以使用标准的 glob 模式匹配。
4) 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
5) 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
6) *.class #忽略所有已Class结尾的文件
3. 查看文件差异(这边比较重要)
git diff HelloWorld.java //查看未暂存的文件和已经暂存的文件的差异,假如暂存区中没有这个文件,则是和上一次提交的版本对比。
git reset HEAD HelloWorld.java //将文件移出暂存区
git diff --cache HelloWorld.java //将暂存区中文件和上一次提交的版本做比较
4. 删除文件
1) git rm -f HelloWorld.java
git commit -m 'delete java'
2) git rm --cache HelloWorld.java //将文件不让git管理但是 还是保留文件
3)git rm xx/* //删除xx文件夹下的所有文件
5. 移动文件(重命名)
git mv HelloWorld.java Hi.java
6. 查看提交历史
1)git log
2)git log -p -2 //显示每次提交的差异,显示最近2次提交
7. 撤销操作相关
1)将文件移出暂存区 git reset HEAD HelloWorld.java
2) 将文件恢复到原来版本,相当于svn中的revert。
git checkout -- chen.txt
8. 远程仓库相关操作
1)git remote -v //查看远程仓库信息
2)添加远程仓库
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git
3) 推送分支
git push origin master //将当前分支推送给master分支
9. 标签相关的
1)git tag //列出所有标签,标签可以有注释
2)git tag -a v1.0 -m '这是1.0版本'
3)git show v1.0 //查看1.0版本信息。
第三章 分支相关
1. 新建一个分支
git branch b_hello //新建了一个分支 但是不会自动切到这个分支上
2. HEAD指针的作用(图片) //用来记录你当前在哪个分支上面,我们也可以理解为是当前分支的别名
远程分支:origin/branch_name
3. git checkout -b b_hello //切换到b_hello分支,没有这个分支就创建一个
4. 分支合并(冲突解决)
git checkout master
git merge b_hello //将hello分支合并到master,merge相当于一次commit
上述合并可能会产生冲突,此时需要手动解决(打开master分支上的文件)
l am chensongxia
she is zhaoru
xxxxxxxxxxxxxx
<<<<<<< HEAD
vvvvvvvvvvvvvvccccwwwwwwwwc
=======
vvvvvvvvvvvvvvcccccxxxxxxxxxxxxxxx
>>>>>>> b_test_confict
手动合并之后 执行git add 然后commit就行
5. 删除分支
git branch -d b_hello
6. 查看分支信息
git branch -v
查看还没有和当前分支合并的分支
git branch --no--merge
7. 推送分支
git push origin b_name
git fetch origin
git pull
8. 跟踪远程分支
git fetch
git branch -a
git checkout -b b_name origin/b_name
9. 删除某个远程分支
git push origin :b_name (注意冒号前有空格)
10. 分支rebase
让分支提交的历史更加整洁干净。
总结:
这章主要讲了分支相关的内容,重点把握
1)HEAD指针、远程分支概念;
2)merge的原理图;
3)冲突解决;
4)命令流程:
git fetch
git branch -a
git merge origin/master
git checkout b_name
git merge master
第四张 服务器上的Git
1. 什么是裸仓库
裸仓库就是一个只包含.git目录的仓库,服务器上的git就是一个裸仓库。
2. Git支持的协议
本地传输协议、SSH协议、GIT协议、HTTP协议
3. 我们需要一个项目的拥有者给你添加写的权限,才能像项目推送代码。
假如我们没有写权限,可以fork一个项目,后面再提交pull request。
但是这样会有一个问题就是要怎么保证你fork的项目和原项目同步