Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS)
官网:https://git-scm.com/download
Git有两种类型的仓库:
本地仓库:是在开发人员自己电脑上的Git仓库
远程仓库:是在远程服务器上的Git仓库
Git有三大常用操作:
Clone:克隆,就是将远程仓库复制到本地
Push:推送,就是将本地仓库代码上传到远程仓库
Pull:拉取,就是将远程仓库代码下载到本地仓库
1.从远程仓库中克隆代码到本地仓库
2.从本地仓库中checkout代码然后进行代码修改
3.在提交前先将代码提交到暂存区
4.提交到本地仓库。本地仓库中保存修改的各个历史版本
5.修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
1.工作目录
工作目录(工作区):包含
.git
文件夹的目录就是工作目录,主要用于存放开发的代码
Git工作目录下的文件存在两种状态:
1.untracked 未跟踪(未被纳入版本控制)
2.tracked 已跟踪(被纳入版本控制)
Unmodified 未修改状态
Modified 已修改状态
Staged 已暂存状态
这些文件的状态会随着执行Git的命令发生变化
当新建一个文件后,文件状态:untracked 未跟踪
当执行git add 文件后,文件处于暂存区,文件状态:Staged 已暂存状态
当git commit 文件后,文件被纳入版本控制库,文件状态:Unmodified 未修改状态
当修改这个文件后,文件状态:Modified 已修改状态
2.暂存区
暂存区:
.git
文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方
3.版本库
版本库:看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
常用的Git代码托管服务器有GitHub
、码云
、GitLab
等。
gitHub(
https://github.com
)是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub
码云(
https://gitee.com
)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
GitLab(
https://about.gitlab.com
)是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务
高速下载之安装包集合 (密码:ehdz)
1.双击Git安装程序,一路“Next”使用默认选项。
2.查看是否安装成功: git --version
双击TortoiseGit程序,一路“Next”使用默认选项。
选择Git默认的SSH连接,使用默认第一项Putty也可以。
安装路径根据自己需求决定
到最后有个初始化配置,默认选项下会启动配置画面。默认继续下一步。
配置git.exe,找到git.exe所在的目录。
配置开发者姓名及邮箱,每次提交代码时都会把此信息包含到提交的信息中。
安装完毕后在系统右键菜单中会出现git的菜单项。
若安装出现异常:
Could not write value to key \ *** \ *** \ Verify that you have sufficent access to that key , or contact your support personnel
使用管理员权限进入CMD执行:
msiexec /package C:\Users\Admin\Downloads\Programs\TortoiseGit-2.13.0.1-64bit.msi
安装中文语言包不是必选项的,根据个人情况选择安装。双击 ,直接“下一步”完成安装。
语言包安装完毕后可以在TortoiseGit的设置中调整语言
版本库又名仓库,英文名repository。可以简单理解成一个目录,目录里面的所有文件都可以被Git管理,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。
可以使用git bash或者使用tortoiseGit创建一个版本库。选择一个合适的地方,创建一个空目录,例如:D:\repository。
1.使用GitBash
在当前创建的空目录中点击右键选择Git Bash来启动
创建仓库执行命令: git init
2.使用TortoiseGit
使用TortoiseGit时只需要在创建的空目录中点击右键菜单选择“在这里创建版本库”
版本库创建成功,会在此目录下创建一个.git的隐藏目录
添加过程
1.在工作目录创建Test.txt文件
2.添加Test.txt文件到暂存区
添加文件到暂存区后,文本文件变为带“+”号的图标
3.提交文件到版本库
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
“.git”目录就是版本库,将来所有文件都需要保存到版本库中。
包含“.git”目录的目录,也就是.git目录的上一级目录就是工作目录。只有工作目录中的文件才能保存到版本库中。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
创建Git版本库时,Git自动创建了唯一一个master分支,所以git commit就是往master分支上提交更改。
被版本库管理的文件不可避免的要发生修改,此时只需要直接对文件修改即可,修改完毕后需要将文件的修改提交到版本库。
修改文件后,文本文件上出现带"叹号"的图标
提交文件到版本库后,文件出现带"√"的绿色图标
在开发过程中有可能会查看代码的修改历史(修改日志),通过日志记录查看某个版本是谁修改的,什么时间修改的,修改了哪些内容。
当文件修改后不想把修改的内容提交,还想还原到未修改之前的状态。此时可以使用“还原”功能。
还原操作会撤销所有未提交的修改,所以当做还原操作是需要慎重!
修改还原之前
开始还原
还原后
删除本地文件并提交修改会同步删除版本库中的文件
执行删除并保存本地副本以及提交修改后,会删除版本库中的文件,保留本地文件
执行删除并保存本地副本且未提交时
执行提交修改操作后
版本库中文件也被删除
将一个项目工程复制到工作目录,并将项目工程文件添加到暂存区
在一个项目工程中,并不是所有文件都需要保存到版本库中,例如target编译目录。
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
TortoiseGit可以直接使用菜单项进行选择忽略。
点击确定后,选择保留本地文件。完成后在此文件夹内会多出一个.gitignore文件,这个文件就是文件忽略文件,当然也可以手工编辑。
将.gitignore文件添加到暂存区,同代码提交到版本库。
1.空行或是以 # 开头的行即注释行将被忽略。
# 注释说明
2.在前面添加正斜杠 / 来避免递归。
/build:仅在当前目录下忽略 build文件夹,不包括其他目录
3.在后面添加正斜杠 / 来忽略文件夹。
build/ : 忽略 build/文件夹下的所有文件
build/*.txt : 只会忽略build/目录下以txt结尾的文件,不包括build/s/*.txt
4.使用 ! 来否定忽略,比如在前面用了 *.apk ,然后使用 !a.apk ,则这个a.apk不会被忽略。
*.txt !hello.txt : 忽略 .a 文件, 但否定忽略 hello.txt
5.* 用来匹配零个或多个字符。
*.a: 忽略 所有以.a 结尾的文件
*.[oa] :忽略所有以".o"或".a"结尾
6.*~ 忽略所有以 ~ 结尾的文件(这种文件通常被许多编辑器标记为临时文件);
7.[] 用来匹配括号内的任一字符,如 [ab] ,也可以在括号内加连接符,如 [0-9] 匹配0至9的数;
8.? 用来匹配单个字符。
1.在github上创建仓库
SSH 为 Secure Shell(安全外壳协议)的缩写,由 IETF 的网络小组(Network Working Group)所制定。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
1.基于密匙的安全验证
使用ssh协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
2.ssh密钥生成
右键 选择 git bash 执行命令 ssh-keygen -t rsa ,一路敲回车使用默认即可,生命公钥和私钥。
执行命令完成后,在window本地用户.ssh目录C:\Users\用户名\.ssh下面生成公钥和私钥。
3.SSH密匙配置
将生成的密钥在github上进行配置,本地才可以顺利访问。
将id_rsa.pub文件内容添加到key部分,然后点击“Add SSH key”按钮完成配置。
使用git bash
在仓库所在的目录(D:\repository)点击右键选择“Git Bash Here”,启动git bash程序.
执行添加远程仓库与推送远程仓库命令:
git remote add origin [email protected]:ChinaJackChen/Test.git
git push -u origin master
出现fatal: remote origin already exists.错误。需要先删除在添加
git remote rm origin
git remote add origin [email protected]:ChinaJackChen/Test.git
由于TortoiseGit使用的ssh工具是“PuTTY”git Bash使用的ssh工具是“openSSH”,如果想让TortoiseGit也使用刚才生成的密钥可以做如下配置
远端:默认名称origin,可以改名
Url:远程仓库的地址
推送URL:远程仓库的地址
Putty密钥:选择刚才生成的密钥中的私钥
本地仓库的文件夹中右键,选择“Git同步”,点击推送。
克隆远程仓库也就是从远程把仓库复制一份到本地,克隆后会创建一个新的本地仓库。
使用git bash
git clone [email protected]:ChinaJackChen/TestDemo.git
使用TortoiseGit
任意目录点击右键,选择`Git 克隆`,输入远程仓库地址。
- git fetch: 从远程获取最新版本到本地,不会自动merge(合并代码)
- git pull:从远程获取最新版本并merge到本地
- 使用TortoiseGit,点击右键菜单,选择“拉取”(pull)或者“获取”(fetch)
在Git里,默认分支叫主分支,即master分支。master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。HEAD指针指向master,master指向提交的节点,所以,HEAD指向的就是当前分支。
当创建新的分支,新分支dev时,Git就新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上
在dev分支进行修改和提交就只会针对dev分支,比如新提交一次后,dev指针往前移动一步,而master指针不变。
把dev分支合并到master分支上,直接把master指向dev的当前提交,就完成了合并,合并完分支后,可以删除dev分支,删除dev分支就是把dev指针给删掉。
如果想创建完毕后直接切换到新分支可以选择“切换/检出”或者在“创建分支”中 勾选“切换到新分支”。
分支切换到dev后就可以对工作区的文件进行修改,然后提交到dev分支,原来的master分支不受影响。
在dev分支修改.gitignore文件,并提交到本地仓库。
右键菜单选择“切换/检出”,选择master分支,切换到master分支后,dev分支修改内容不会影响master分支文件内容
在master分支修改.gitignore文件,并提交到本地仓库。
将dev分支的内容合并到master分支,当前分支为master。从右键菜单中选择“合并”。
正常情况下,dev分支上修改的内容会合并到master分支上。
两个分支中编辑的内容都是相互独立互不干扰的,如果在两个分支中都对同一个文件进行编辑,然后再合并,就有可能会出现冲突。
在冲突文件上右键选择“解决冲突”菜单项,把冲突解决完毕的文件提交到版本库
配置Git安装路径,idea一般会自动找到git的安装位置。
创建本地仓库,在菜单中选择“vcs”→Import into Version Control→Create Git Repository.
创建本地仓库后,工具栏上就多出git相关工具按钮
将项目工程添加到git本地仓库
在github上创建一个仓库然后将本地仓库推送到远程。在菜单中选择vcs→git→push或其他方式。
点击“push”按钮就将本地仓库推送到远程,如果是第一次配置推送需要输入github的用户名和密码。
关闭工程后,在idea的欢迎页上有“Check out from version control”,点击选择版本控制工具。
在项目中点击“file New Project from Version Control”,然后选择版本控制工具