大纲
git基本介绍
Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。
国内git:gitee、gitlab
git原理
git工具
1、git的git base 命令行的方式,进行项目的管理
2、各个开发工具的git插件、会有详细的提交记录
3、git的图形化客户端souceTree工具
第一部分:本地提交代码到远程仓库
1、本地需要下载客户端工具
git2.29.2
2、通过账户连接git
一种通过本地git窗口连接
一种是通过工具【eclipse、idea】等建立连接
4、通过命令git先初始化项目、生成git仓库文件、默认是隐藏的,可以通过window将隐藏文件展现出来
5、提交本地仓库过程(工具提交、命令行,就是最后一步需要连接远程仓库地址,不是通过账户进行校验)
一:初始化版本库:-git init
二:添加文件到缓存区:-git add --添加所有文件 是:加个点-列:git add .
三:查看仓库状态:-git status
四:添加到本地仓库:-git commit -m “提交说明”
五:push到远程仓库,会验证用户连接是否正常,验证通过再进行版本验证,通过生成新的线上版本 : git push -u 分支名称 master
提交前,需要先拉取代码、否则容易造成版本提交冲突
第二部分:从远程仓库拉取代码
第一步:建立连接后,拉取文件后进行commit 提交,记得在提交中写上本次修改所对应的功能点,自己回顾能快速定位到相应代码。:git pull
git 基本命令集(工作中灵活运用这些命令足够)
创建仓库命令
下表列出了 git 创建仓库的命令:
命令 | 说明 |
---|---|
git init | 初始化仓库 |
git clone | 拷贝一份远程仓库,也就是下载一个项目。 |
提交与修改
Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。
下表列出了有关创建与提交你的项目的快照的命令:
命令 | 说明 |
---|---|
git add | 添加文件到仓库 |
git status | 查看仓库当前的状态,显示有变更的文件。 |
git diff | 比较文件的不同,即暂存区和工作区的差异。 |
git commit | 提交暂存区到本地仓库。 |
git reset | 回退版本。 |
git rm | 删除工作区文件。 |
git mv | 移动或重命名工作区文件。 |
提交日志
命令 | 说明 |
---|---|
git log | 查看历史提交记录 |
git blame | 以列表形式查看指定文件的历史修改记录 |
远程操作
命令 | 说明 |
---|---|
git remote | 远程仓库操作 |
git fetch | 从远程获取代码库 |
git pull | 下载远程代码并合并 |
git push | 上传远程代码并合并 |
版本冲突问题
1、git版本冲突相对SVN麻烦一些
第一步:备份本地所改动的文件,在进行版本回退,在拉取最新文件
第二步:把备份替换所改的文件,在进行提交。
git分支
创建分支命令: git branch
切换分支命令:git checkout (branchname)
合并分支命令: git merge
列出分支基本命令: git branch
删除分支命令:git branch -d (branchname)
git配置文件
.gitignore(文件名)
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings
.loadpath
.recommenders
.classpath
.class
.project
#External tool builders
.externalToolBuilders/
#Locally stored "Eclipse launch configurations"
*.launch
#PyDev specific (Python IDE for Eclipse)
*.pydevproject
#CDT-specific (C/C++ Development Tooling)
.cproject
#CDT- autotools
.autotools
#Java annotation processor (APT)
.factorypath
#PDT-specific (PHP Development Tools)
.buildpath
#sbteclipse plugin
.target
#Tern plugin
.tern-project
#TeXlipse plugin
.texlipse
#STS (Spring Tool Suite)
.springBeans
#Code Recommenders
.recommenders/
#Annotation Processing
.apt_generated/
#Scala IDE specific (Scala & Java development for Eclipse)
.cache-main
.scala_dependencies
.worksheet
.settings/
.classpath
WebContent/classbean/
*.trc
.idea
*.iml
git建立远程仓库
这里拿github举例
自己在github上建立账户 ,然后创建仓库,可以公开与私有,选择初始化远程库时,有哪些文件
本地通过、git命令窗口,连接改账户,通过ssh-keygen -t rsa -C “邮箱号”:生成公钥和密钥
将公钥赋值扔到github的ssh 连接方式生成钥匙。
本地验证是否连接成功:ssh -T git@github.com
git与svn的区别
1、Git是分布式的,SVN不是
Git记录版本历史只关心文件数据的整体是否发生变化。Git 不保存文件内容前后变化的差异数据。
在分布式版本控制系统中,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。
Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。
提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。
冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。
2、Git把内容按元数据方式存储,而SVN是按文件:
Git 的版本库和工作区在同一个目录下,工作区的根目录有一个.git的子目录,这个名为 .git的目录就是版本库本身,它是Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。所以千万要小心删除这个文件。
工作区中其他文件为工作区文件,可能是从 .git 中检出的,或者是要检入的,或者是运行产生的临时文件等。
3、GIT分支和SVN的分支不同
Git 的工作区中只在工作区的根目录下有一个 .git 目录,此外再无任何控制目录。Git 工作区下唯一的 .git 目录是版本库,并非 .svn 的等价物,如果删除了 .git 目录,而又没有该版本库的其他镜像(克隆)的话,你破坏了整个历史,版本库也永远的失去了。
Git 在本地的 .git 版本库,提供了完全的改动历史。除了和其他人数据交换外,任何版本库相关的操作都在本地完成,更多的本地操作,避免了冗长的网络延迟,大大节省了时间。例如:查看 log,切换到任何历史版本等操作都无须连接网络。
SVN的全局版本号和CVS的每个文件都独立维护一套版本号相比,是一个非常大的进步。在看似简单的全局版本号的背后,是Subversion提供对于事物处理的支持,每一个事物处理(即一次提交)都具有整个版本库全局唯一的版本号。
Git的版本号则更进一步,版本号是全球唯一的。Git 对于每一次提交,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,得到一个40位的十六进制字符串,Git将此字符串作为版本号。
4、GIT的内容完整性要优于SVN
Git 没有部分检出,这并不是说只有将整个库克隆下来才能查看文件。有很多 git 工具,提供直接浏览git库的功能,例如 gitweb, trac 的 git 版本库浏览, redmine 的 git 版本库浏览。
Git-submodule 可以实现版本库的模块化:Git 通过子模块处理这个问题。
子模块允许你将一个Git 仓库当作另外一个Git仓库的子目录。这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。
Git 为什么没有实现 svn export 的功能?由于git的本地仓库信息完全维护在project根目录的.git目录下,(不像svn一样,每个子目录下都有单独的.svn目录)。所以,只要clone,checkout然后删除.git目录就可以了。
下载上传文件数据速度:
下拉一个目录,一个分支拥有几个分支节点,svn需要根据不同的分支生成几个版本的文件,而git只需获取每个版本的元素,载入主分支。本地通过svn拉取大约十来G的文件,svn需要拉大半天的时间