git创建以及使用

什么是git

git是当前互联网开发的主流版本分布式控制系统

全称是分布式版本控制系统,git通常在编程中会用到,并且git支持分布式部署,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库

还有一个SVN是集中式版本控制系统 两者最大的区别就在于SVN只有一台主服务器,而git所用到的每一台电脑都可以当成主服务器

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库.

1.版本控制地简介

官方理解:版本控制是维护工程蓝图地标准做法,能追踪工程蓝图从诞生一直到定案地过程
个人理解:版本控制就是一种记录若干文件内容变化,以便将来查阅特定版本修订情况地系统

2.版本控制地工具

1.集中式版本控制工具: SVN、VSS、CVS

2.分布式版本控制工具: Git、 Mercurial、 Bazaar…

3.git介绍

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

4.git特点

开发者可以提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的git仓库

Git的优缺点

1.分布式开发时,可以git clone克隆一个本地版本,然后在本地进行操作提交,本地可以完成一个完整的版本控制。在发布的时 候,使用git push来推送到远程即可。

2.git分支的本质是一个指向提交快照的指针,速度快、灵活,分支之间可以任意切换。都可以在本地进行操作可以不同步到远程

3.冲突解决,多人开发很容易就会出现冲突,可以先pull远程到本地,然后在本地合并一下分支,解决好冲突,在push到远程即 可。

4.离线工作,如果git服务器出现问题,也可以在本地进行切换分支的操作,等联网后再提交、合并等操作。

扫描二维码关注公众号,回复: 11296229 查看本文章

缺点:

1.git没有严格的权限控制,一般是通过系统设置文件的读写权限来做权限控制。

2.工作目录只能是整个目录,而svn可以单独checkout某个有权限的目录。

3.git上手可能没有svn那边顺手,需要经过学习一下。

总结:

1.如果对访问控制、权限分配和代码安全性等要求比较高的,建议使用svn。

2.如果是分布式,多人开发,版本迭代比较快的项目,建议使用git。

Linux 平台上安装

Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。

在有 yum 的系统上(比如 Fedora)或者有 apt-get 的系统上(比如 Debian 体系),可以用下面的命令安装:

各 Linux 系统可以使用其安装包管理工具(apt-get、yum 等)进行安装:

可以直接在官网上下载安装:https://git-scm.com/downloads

命令/术语 常见翻译以及简介
add 暂存:将更改添加至暂存区(stage)
commit 提交:提交暂存区,生成新的 commit 对象,并重定向当前分支到新的 commit 对象
branch 分支:创建一个新的分支,指向当前 commit 对象
HEAD 指针:指针指向当前分支(branch),当前分支指向一个 commit 对象,即当前版本
reset 重定向 HEAD 所指向的分支(当前分支)到目标 commit 对象
checkout 重定向 HEAD 到目标分支(也用作文件撤销更改)
merge 合并:将目标分支合并到当前分支。若非快速合并,会生成新的 commit 对象
stash 储藏:保存当前的工作区和暂存区,以待将来取出(应用)
clone 克隆:将远程仓库复制为一个本地仓库
push 推送:将本地仓库的一个分支推送至远程仓库的指定分支
fetch 获取:将一个远程仓库的一个分支复制到本地
pull 拉取:将一个远程仓库的一个分支复制到本地并尝试合并。pull = fetch + merge
fork 指在 GitHub 上复制一个别人的仓库为自己的远程仓库
pull request 指在 GitHub 上请求别人拉取自己为他的仓库开发的分支

git remote add origin 远程仓库地址 讲远程仓库和本地仓库连接起来

Git仓库.git文件夹目录介绍

1 ORIG_HEAD

远程仓库 当前引用
在git本地仓库根目录 运行:
cat .git/ORIG_HEAD
1
显示
88e6fb86f5317bdfd2e8a78899334e9f0ba16987

1
2
如图:

2 HEAD

本地仓库 当前引用
文件内容:refs/heads/
1
在git本地仓库根目录 运行:
cat .git/HEAD
1
显示
ref: refs/heads/master

1
2

3 refs/heads/branchName

本地仓库 当前分支
在git本地仓库根目录 运行:
cat .git/refs/heads/master
1
显示
3396b04ee5343498d8c2f457d14d3aee36239c6f

1
2
这是 当前分支最后一次commitId
2 和 3 的关系如图:

4 refs/remotes/repertoryName/HEAD

远程仓库当前分支
在git本地仓库根目录 运行:
cat .git/refs/remotes/origin/HEAD
1
显示
ref: refs/remotes/origin/master

1
2

5 refs/remotes/repertoryName/remoteBranchName

远程仓库对应分支最后一次commit
在git本地仓库根目录 运行:
cat .git/refs/remotes/origin/master
1
显示
581ba1436ebaa54a7f5d0f1db8cc4da0ca72127e

1
2
这是远程仓库当前分支最后一次commitId
4 和 5 的关系如图:

6 logs/refs/heads/branchName

本地仓库对应分支所有操作
在git本地仓库根目录 运行:
cat .git/logs/refs/heads/master

1
2
显示
0000000000000000000000000000000000000000 88e6fb86f5317bdfd2e8a78899334e9f0ba16987 author [email protected] 1537330001 +0800 clone: from https://github.com/google/guava.git

88e6fb86f5317bdfd2e8a78899334e9f0ba16987 581ba1436ebaa54a7f5d0f1db8cc4da0ca72127e author [email protected] 1538568357 +0800 pull: Fast-forward
1
2
3
本地master分支的两次操作
1 clone 项目
commitId(0000000000000000000000000000000000000000) ——> commitId(88e6fb86f5317bdfd2e8a78899334e9f0ba16987)
1
2 git pull: Fast-forward
commitId(88e6fb86f5317bdfd2e8a78899334e9f0ba16987) ——> commitId(581ba1436ebaa54a7f5d0f1db8cc4da0ca72127e)
1

7 logs/refs/heads/repertoryName/branchName

远程仓库对应分支所有操作
在git本地仓库根目录 运行:
cat .git/logs/refs/remotes/origin/master
1
显示
88e6fb86f5317bdfd2e8a78899334e9f0ba16987 581ba1436ebaa54a7f5d0f1db8cc4da0ca72127e songyuequan [email protected] 1538568357 +0800 pull: fast-forward
1
同上

8 refs/tags/tagName

文件内容:tag所在的commitID
在git本地仓库根目录 运行:
cat .git/refs/tags/Release1.0
1
显示
72014f48f489e1e43519212de1bd9f78c3755a4c
1

9 packed-refs

clone仓库时所有的引用

10 COMMIT_EDITMSG

本地最后一个提交的信息

11 objects目录

所有文件对象
具体详情请看 这篇翻译文章

https://blog.csdn.net/songyuequan/article/details/85862415

12 info

待研究

13 index

Git暂存区原理

14 hooks

shell脚本

猜你喜欢

转载自blog.csdn.net/weixin_46191854/article/details/106413723
今日推荐