赞
踩
SVN是Subversion的简称,目前是Apache项目底下的一个开放源代码的版本控制系统,SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而开发人员工作的时候,用的都是自己的电脑,所以首先要从中央服务器下载最新的版本,然后开发,开发完后,需要把自己开发的代码提交到中央服务器。
由于为Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间),在 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 这样大神 Linus Torvalds就开始缔造21世纪最伟大的版本控制工具git。
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS) ,分为两种类型的仓库:本地仓库和远程仓库。
本地仓库:是在开发人员自己电脑上的Git仓库
远程仓库:是在远程服务器上的Git仓库
Clone:克隆,就是将远程仓库复制到本地
Push:推送,就是将本地仓库代码上传到远程仓库
Pull:拉取,就是将远程仓库代码下载到本地仓库
1.从远程仓库中克隆代码到本地仓库
2.从本地仓库中checkout代码然后进行代码修改
3.在提交前先将代码提交到暂存区
4.提交到本地仓库。本地仓库中保存修改的各个历史版本
5.修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
小猿此处以windows为例。
上官网下载实在是太慢,小猿打算从华为镜像或者阿里镜像下载,小猿选择的是华为镜像,可能需要账号,没有账号的童鞋可能需要注册一下。
小猿电脑是64位的,选择下载如下:
安装时可以疯狂的点击下一步,选择默认。
Git中有两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
由于github访问速度受限,在国内比较流行的是码云,以下小猿开始着重介绍码云和git的采用方式。
小猿已有码云账号,也有对应的java学习仓库
小猿当前的地址是:
https://gitee.com/xueshanfeitian/my-java-learning-rep.git
安装完Git后首先要做的就是配置环境变量,在任意目录下打开git.bash输入命令。
$ git config --list
2.配置用户名和邮箱 小猿需要设置的命令为feitian,
git config --global user.name "feitian"
git config --global user.email "feitian@189.cn"
再次查看环境配置
在本地某个盘建立一个仓库文件夹
在git bash 命令终端中切换到兴建仓库文件夹的目录下,执行
git init
说明本地仓库初始化成功。
进入到将要放置克隆仓库的文件夹
git clone https://gitee.com/xueshanfeitian/my-java-learning-rep.git
仓库克隆完毕
上述所看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方。
untracked 未跟踪(未被纳入版本控制)
tracked 已跟踪(被纳入版本控制)
这些文件的状态会随着我们执行Git的命令发生变化
小猿在刚刚克隆的仓库中添加几个文件并修改README.MD,查看各个we文件的状态。
git status
其中hellowworld为未跟踪状态,而readme.md为已修改状态,那么如何将未跟踪的文件加入到跟踪区,这就要求我们将此文件加入暂存区。
git add helloworld.txt
将已跟踪文件变成未跟踪状态文件。
git restore --staged helloworld.txt
目标文件提交到版本库必须先要放到暂存区已修改文件或者未跟踪文件都是没有放入暂存区,首先需要放入暂存区。
git add README.md
git add helloworld.txt
小猿将两个文件都进行提交
git commit README.md helloworld.txt -m "update introduction"
再次查看
此处值得大家注意的是如果不加-m 默认情况下git会进入vi编辑器j进行日志手写。
如小猿现在需要删除helloworld.txt,在git中输入命令
git rm helloworld.txt
当执行rm命令操作的暂存区,后续还需要提交才能真正删除,
git commit -m "deleted"
如果直接从仓库中删除了文件,这种情况就相当于越过暂存区操作,所以解决方案是先加入暂存区,再进行提交,一般情况下不建议这么做。
git add xxx
git commit -m "delete"
在实际开发过程中有些文件可能不需要我们进行版本控制,也不希望它们总出现在未跟踪文件列表,这时我们需要建立忽略列表。通常建立忽略列表一般包含日志文件,编译器产生的编译文件等,忽略列表一般命名为: .gitignore。下面是忽略列表编写的一些规则:
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
如:我们需要忽略Account.class 和User.class,这时我们就需要建立忽略列表,注意在工作目录下无法直接创建.gitignore文件,我们需要借助git终端。
使用touch命令或者直接vim命令都可以,小猿直接使用vim编辑器命令,vim编辑器会默认创建文件。
vim .gitignore
加入 *.class
忽略效果明显,.class文件不再提示未提交到暂存区
git log
查看远程仓库基本信息
git remote -v
若要进一步查看更加详细的信息,则采用如下命令
git remote show origin
添加远程仓库的本质是将本地仓库和远程仓库之间相互建立关系,其命令如下:
git remote add origin https://gitee.com/xueshanfeitian/gitrepository.git
当然本地仓库也可对应多个远程仓库,及本地仓库可以与多个远程仓库建立关系,但通常这么做没有意义。
git remote rm
此条命令的本质是移除远程仓库与本地仓库的关系,并不是真正的直接删除远程仓库。
git fetch
此处要注意的是git fetch 命令是将远程仓库中的内容抓取后以二进制的方式存在objects目录下面,并没有自动合并到工作目录中来。
此时查看并没有源文件
如要看到全部源文件,需要做的是合并命令。
git merge origin/master
发现所有文件均合并了
git pull origin master
git pull 相当于git fetch和git merge两个命令
下面是采用git pull 发生错误的情况,对于这种情况是用于本地仓库中已经含有其他文件信息,git认为其中存在错误,故而报错
其解决方案是加入允许不相关历史参数,–allow-unrelated-histories
即输入命令
git pull origin master --allow-unrelated-histories
执行命令后会进入日志界面,该界面不需要修改,直接wq!退出即可。
git push origin master
首先修改python.txt 文件,然后将此文件推送到远程仓库。
开始推送
推送成功
基于不同的需求,就需要根据基础代码创建不同的分支,分支的
//查看远程仓库分支
git branch -r
//查看本地仓库分支
git branch
//查看所有分支 包含远程分支和本地分支
git branch -a
//建立b1分支
git branch b1
//切换到b1分支
git checkout b1
//将b1推送到远程仓库
git push origin b1
再次验证:
git merge b1
如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决。
如两个User.java合并
//1
public class User{
private int id;
private String sex; //estabilish by master
}
//2
public class User{
public int id;
public String name;//established by B1
}
分别添加上述文件到b1和master分支
添加User.java到b1分支的过程再此处略去,和master分支是一样的。
合并分支
当冲突发生时源文件就被合并为以下文件,我们需要手动解决冲突并提交
推送master 分支到远程仓库
推送b1到远程仓库
master 远程仓库
b1远程仓库
如要删除本地分支b1,则删除命令不能在删除目标分支中进行,所以我们需要切换到master分支中进行删除。
一般采用命令:
git branch -d b2
如当本地仓库中某项文件发生变化(提交到版本库)且没有推送到远程分会,则需要用强制删除分支命令。
git branch -D b1
在删除本地仓库的同时,进一步需要删除远程仓库的分支,则需要执行命令,在远程仓库删除之前。
git push origin –d b1
执行命令后
Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。 标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态,下面小猿来学习git 标签的有关命令。
git tag v1.0
git tag
git show [tag]
推送到远程标签
git push origin v1.0
已成功推送。
git tag -d v1.0
先执行删除本地仓库
git tag -d v3.0
本地删除完毕,需要将本地删除推送到远程。
git push origin :refs/tags/v3.0
TortoiseGit是一个开放的GIT版本控制系统的源客户端,TortoiseGit是比较常见的版本控制工具,我们可以采用图形化的界面来进行版本管理。
3.配置远程仓库
4. 点击提交
切换到master分支,master分支中没有c++.cpp文件,需要合并
开始操作
再次查看,master分支中出现了c++.cpp文件
至此,小猿已经具备git的基本技能,下一节,小猿将和大家一起学习git和idea的配置使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。