Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具
选择 Git 安装位置,要求是非中文并且没有空格的目录(可以自己选择位置),然后下一步
Git 选项配置,推荐默认设置,然后下一步。
Git 的默认编辑器,建议使用默认的 Vim 编辑器,然后点击下一步。
默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步。
修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git。
选择后台客户端连接协议,选默认值 OpenSSL,然后下一步
配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换,然后继续下一步。
选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步
选择 Git pull 合并的模式,选择默认,然后下一步。
选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。
其他配置,选择默认设置,然后下一步。
实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install按钮,开始安装 Git。
集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新
好处:
每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易
坏处:
是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
版本库:工作区中有一个隐藏目录.git,这个目录不属于工作区,而是git的版本库,是git管理的所有内容
暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。
分支:版本库中包含若干分支,提交的文件存储在分支中
对应的就是一个目录,这个目录中的所有文件被git管理起来。
以后会将一个项目的根目录,作为仓库。
仓库中的每个文件的改动都由git跟踪。
有两种取得 Git 项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库。第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来。
状态 | 描述 |
---|---|
已提交 (committed) | 已提交表示数据以及安全存在本地数据库 |
已修改(modified) | 已经修改了文件,还没保存到数据库中 |
以暂存(staged) | 以占存表示对一个已修改的文件的当前版本做了标记,使之包含在下次提交的快照中 |
分类 | 描述 |
---|---|
工作区 | 简单的理解为在电脑上能看到的目录比如自己创建的本地项目目录 |
暂存区 | git的库版本里面其中最重要的就是称作stage 的暂存区还有git创建的第一个master主分支,以及指向master的一个指针叫HEAD |
git仓库 | 工作区有一个隐藏的目录.git 这个不算工作区而是git的版本库 |
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户邮箱 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。
touch ~/.bashrc
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
source ~/.bashrc
git config --global core.quotepath false
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
git config --global user.name "xxx" #名称
git config --global user.email "[email protected]" #邮箱
git config -l #查看信息
git config --global --list
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的仓库都会默认使用这里配置的用户信息。如果要在某个特定的仓库中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前仓库的 .git/config 文件里。
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
git version #查看git版本
git init
git status
git add 文件名
但是一般都会使用
git add .
git add . :会把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤
git add * :会忽略.gitignore把任何文件都加入
git commit -m "日志信息" 文件名
git reflog 查看版本信息
git log 查看版本详细信息
git reset --hard 版本号
分支,是一个个版本的最终存储的位置
分支,就是一条时间线,每次 git commit 形成一个个版本,存储在分支的一个个提交点
分支由多个提交点组成,分支上会有一个指针,默认总是指向最新的提交点
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
git branch -v #查看本地所有分支,带*的是当前分支
git branch -r # 列出所有远程分支
仓库中默认只有master分支
执行git commit时,默认是在master分支上保存版本。
在商业项目开发过程中,我们不会轻易的在master分支上做操作。
当代码确实没有问题时,才会将开发分支上成熟的代码版本添加到master分支上。
保证开发过程中,可以及时记录版本,又保证master分支上每个提交点都是稳健版本。
git branch 分支名
git branch dev #创建名字为dev的分支
默认情况下,当前使用的分支是master分支
可以切换到dev分支,则后续的git commit便会在dev分支上新建版本(提交点)
git checkout 分支名
git checkout dev #从主分支切换到dev分支
git log --oneline #简易日志
git log #完整日志
两个分支内容的合并
git merge分支a合并分支a
git merge 分支名 #合并指定分支到当前分支
合并的方式有两种:快速合并和三方合并。
8.4.1快速合并
如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是移动指针即可。
三方合并
在不具备快速合并的条件下,会采用三方合并。
两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留改文件哪个分支的修改。
出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。
解决方案:
1.保留某一方的,删除另—方的
2.保留双方的
3.但无论如何,要记得删除<<<<=三== >>>>这些
4.本质是两人协商为冲突的内容,定制出合理的内容。
5.协商后,需要再次提交修改后的内容
冲突产生的表现:后面状态为 MERGING
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替
我们决定使用哪一个。必须人为决定新代码内容
编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> dev
git branch -d 分支名
删除远程分支
git push origin --delete 分支名
git branch -dr 分支名
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与 |
当前本地分支直接合并 |
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
git push 别名 分支
git pull 远程库地址别名 远程分支名
git clone 远程地址
我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。
ssh-keygen -t rsa -C 1106649325@qq.com
敲3个回车
复制 id_rsa.pub 文件内容
接下来再往远程仓库 push 东西的时候使用 SSH 连接就不需要登录了。
在工作目录中初始化新仓库
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:
git init # 在当前目录新建一个Git代码库
2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
克隆远程仓库
# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]
Git 仓库基础操作
1.初始化一个Git仓库
git init #初始化一个Git仓库
2.将文件添加到Git的暂存区
git add . #可以将当前仓库的所有改动加到暂存区
3.查看仓库状态
git status #可以看到工作区中文件的状态
4.从Git的暂存区提交版本到仓库,参数-m后为当次提交的备注信息
git commit -m "备注信息xxx" #将暂存区的文件存入分支形成版本
5.将本地的Git仓库信息推送上传到服务器
git push https://gitee.com/***/test.git
6.查看git提交的日志
$ git log
Git关联远程仓库
git remote add origin [url] #关联远程仓库
查看远程仓库地址
git remote -v #查看远程仓库地址
推送文件到远程仓库
将本地仓库以及commit的内容推送到远程仓库,共享自己的代码
git push -u origin master 将本地的master分支上传到远程master分支
克隆远程仓库
如果仓库已由别人创建完毕,我们需要其中的内容,则可以通过 git clone 将其复制到本地
git clone [url]
代码共享
多人协同开发时,写好的代码git push 上传到远程仓库,需要代码的git pull拉取
git pull origin master #拉取远程的master分支内容
这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下
git.ignore 文件模版内容如下:
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
[user]
name = dyk
email = 1106649325@qq.com
[core]
excludesfile = C:/Users/Dell/git.ignore
注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”
在 IDEA 的左下角,点击 git,然后点击 Log 查看版本
在 IDEA 窗口的右下角,将 dev分支合并到当前 master 分支。
如果代码没有冲突,分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交本地库
注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,
push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程
库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地
代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地
代码更新到最新以后,然后再修改,提交,推送!
注意:pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动
合并,如果自动合并失败,还会涉及到手动解决冲突的问题
基本和github相同,但是idea要下一个gitee的插件
码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。
因为github是国外的服务器。所以下载很慢我们用码云通不过来再通过码云下载速度就快很多
具体操作如下:
文档链接
in:name example 名字中有“example”
in:readme example readme中有“example”
in:description example 描述中有“example”
stars:>1000 star>1000
forks:>1000 fork>1000
pushed:>2019-09-01 2019年9月1日后有更新的
language:java 用Java编写的项目