Tools_Git介绍
1.Git、GitHub、GitLab介绍:
Git: 版本控制系统(Version Control System, VCS),是一种记录若干个文件内容的变化,以便将来查阅特定版本修订情况的系统(可以随便回到记录的某个时刻)。
官网:https://git-scm.com/
GitHub: 面向开源及私有软件项目的托管平台,即在线代码仓库,可以帮助程序员之间相互交流学习
官网:https://github.com/
GitLab: 用于在线代码仓库管理,具备完善的管理界面和权限控制,适用于企业内部(可以看作是私人版GitHub)
官网:https://about.gitlab.com/
Git介绍补充:
Git存在Workspace(工作区), 就是本地电脑可以看到的目录;Index/Stage(暂存区), 一般存放在.git目录下的index文件中,也称索引; Repository(仓库区或本地仓库), 就是工作区中隐藏目录.git;Remote(远程仓库)
Git基本工作流程:
a.在工作区中修改文件;
b.将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区;
c.提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录
d.若要提交至remote repository还需要使用push
文件的四种状态:
Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库中,不参与版本控制,通过git add命令 ,状态会变为Staged。
Unmodify:文件已入库,未修改,即版本库中的文件快照与文件夹中的内容完全一致,这种类型的文件有两种去处,如果它被修改,则变为Modified;若使用git rm命令移出版本库,则变为Untracked。
Modified:文件已修改,仅仅是修改而不含其它操作,这个文件有两个去处,通过git add命令可进入暂存Staged状态,使用git checkout命令则丢弃修改,返回至Unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改。
Staged:暂存状态,执行git commit命令将修改同步至库中,这时库中的文件和本地的文件又变为一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件状态为Modified。
局部范围内忽略文件:
某些模块中的内容是不需要上传的,例如临时文件、配置文件、生成文件等,则需要在目录中创建一个.gitignore文件(属于局部范围内有效的忽略文件),只对某一级目录下的文件有效,编辑内容格式如下:
target //忽略这个target目录
angular.json //忽略这个angular.json文件
log/* //忽略log下的所有文件
css/*.css //忽略css目录下的.css文件
规则:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
备注:全局范围内所有的忽略规则,都以行为单位写在“.git/info/exclude”文件中,若在根目录下创建.gitignore文件,就等价于全局忽略了。还有一种是手工指定忽略文件。
注意:要忽略的文件之前未添加到git索引中,若有则删除,git rm –cached filename将要忽略的文件从索引中删除。
2.Git配置方式:
安装方法:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
3.Git常见操作:
These are common Git commands used in various situations:start a working area (see also: git help tutorial)clone Clone a repository into a new directoryinit Create an empty Git repository or reinitialize an existing onework on the current change (see also: git help everyday)add Add file contents to the indexmv Move or rename a file, a directory, or a symlinkrestore Restore working tree filesrm Remove files from the working tree and from the indexexamine the history and state (see also: git help revisions)bisect Use binary search to find the commit that introduced a bugdiff Show changes between commits, commit and working tree, etcgrep Print lines matching a patternlog Show commit logsshow Show various types of objectsstatus Show the working tree statusgrow, mark and tweak your common historybranch List, create, or delete branchescommit Record changes to the repositorymerge Join two or more development histories togetherrebase Reapply commits on top of another base tipreset Reset current HEAD to the specified stateswitch Switch branchestag Create, list, delete or verify a tag object signed with GPGcollaborate (see also: git help workflows)fetch Download objects and refs from another repositorypull Fetch from and integrate with another repository or a local branchpush Update remote refs along with associated objects
举例说明:
3.1初始化,在想要进行版本控制的文件夹内,鼠标右键选择Git Bash Here,然后在弹出的终端中输入git init进行初始化,初始化成功后会生成一个.git的文件夹(即把这个路径变成git可管理的仓库)
3.2添加用户名与邮箱,在终端中输入git config user.name "Auto"用于添加用户名,输入git config user.email "lyx.j@foxmail.com"用于添加邮箱,使用cat .git/config查看配置信息
在终端中输入git config --system --list用于查看系统配置,git config --local --list用于查看本地配置
查看system配置文件:~Gitmingw64etcgitconfig
查看local配置文件:C:UsersTingshuo2009.gitconfig
3.3添加、提交文件,在终端中输入git add filename用于将文件添加至暂存区,输入git commit -m “提交说明”(或者是git commit filename,此命令会进入nano编辑模式输入提交信息)将暂存区中的文件提交至git中,输入git status查看提交状态,并查看log信息
#注意,这里的编辑模式在安装git时是可选的,推荐使用vim编辑
说明:window下运行git add. 时提示warning: LF will be replaced by CRLF in .idea/compiler.xml. 这是Linux下换行符LF在window下为CRLF。解决方法为:运行如下代码git config core.autocrlf false即可
3.4克隆项目至本地git clone [url],
备注:GitHub加载较慢,有时又打不开,故以下使用Gitee演示
3.5设置gitee为远程仓库:
进入到系统C盘,创建密钥如图所示,创建后会生成两个文件id_rsa与id_rsa.pub,将公钥id_rsa.pub中的内容复制粘贴至gitee设置>SSH公钥
3.6IDEA配置git:
通过PyCharm创建一个新的Project,将clone的gitee的项目文件全部拷贝至PyCharm的Project内,此时会看到PyCharm中的项目文件颜色会有变化,可以通过底部Terminal执行add、commit、push等操作,查看gitee项目地址发现push成功。
4.说明
4.1所有的版本信息仓库全部同步到本地的每个用户,可以在本地看到所有的版本历史,支持离线本地提交,只需要在联网时push到相应的服务器或者其他用户那里,缺点是增加了本地存储空间的占用。
5.参考链接:
https://www.runoob.com/git/git-tutorial.html
https://git-scm.com/book/zh/v2
6.补充:关于Git与SVN
(1)SVN优缺点
优点:
a.管理方便,逻辑明确,符合一般人思维习惯。
b.易于管理,集中式服务器更能保证安全性。
c.代码一致性非常高。
d.适合开发人数不多的项目开发。
缺点:
a.服务器压力太大,数据库容量暴增。
b.如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
c.不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
(2)Git优缺点
优点:
a.适合分布式开发,强调个体。
b.公共服务器压力和数据量都不会太大。
c.速度快、灵活。
d.任意两个开发者之间可以很容易的解决冲突。
e.离线工作。
缺点:
a.学习周期相对而言比较长。
b.不符合常规思维。
c.代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
GIT和SVN的区别(面试):
- Git是分布式,而SVN不是分布式
- 存储内容的时候,Git按元数据方式存储,而SVN是按文件
- Git没有一个全局版本号,SVN有,目前为止这是SVN相比Git缺少的最大的一个特征
- Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。这能确保代码的完整性,确保在遇到磁盘故障和网络问题的时候降低对版本库的破坏
- Git下载下来后,在offline状态下可以看到所有的Log,SVN不可以
- SNV必须先Update才能Commit,忘记合并时就会出现一些错误Git还是比较少的出现这种情况
- 克隆一份全新的目录以同样拥有五个分支来说,SVN是同时赋值5个版本的文件,也就是说重复五次同样的动作。而Git知识获取文件的每个版本的元素,然后只载入主要的分支(master)在我的经验,克隆一个拥有将近一万个提交(commit),五个分支,每个分支大约有1500个文件的SVN,耗了将近一个小时!而Git只用了区区的1分钟
- 版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都瘫痪直到版本库维修完毕或者新的版本库设立完成。而Git可以有无限个版本库。或者,更正确的说法,每一个Git都有一个版本库,区别是他们是否拥有活跃目录(Git Working Tree)。如果主要版本库(例如:设置GitHub的版本库)发生了什么事,工作成员依然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他版本库。
- 分支(Branch)在SVN中,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作人员想要开启新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你对分支是用来破坏工作(安检测试),那将会想传染病一样,你改一个分支,还得让其他人重新切分支重新下载。而Git,每个工作成员可以任意在自己的本地版本库开启无限个分支。eg:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用,我可以开一个分支,做我喜欢的事。完全不需要担心妨碍其他成员的 工作。只要我不合并以及提交到主要版本库,没有一个成员会被影响。等到我不需要这个分支时,我只要把它从我本地版本库删除即可。Git的分支名是可以使用不同的名字的。eg:我的本地分支名为OK,而在主要版本库的名字其实是master。最值得一提的是,我可以在Git的任意一个提交点(commit point)开启分享!(其中一个方法就是使用gitk-all可观察整个提交记录,然后在任意点开启分支。)
- 提交(commit)在SVN中,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成作品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git提交完全属于本地版本库的活动。而你只需“推”(Git push)到主要版本库即可。Git的“推”其实是在执行“同步”(Synchronize)
总结:
SVN的特点是简单,只是需要一个放代码的地方使用就OK;
Git的特点:版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持(当然这是开发者最关心的地方),不过想各位能更好的使用它,需要花点时间尝试下。
标签:
相关文章
-
无相关信息