Git基础学习(一)

一、Git概念
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
(一)工作原理
你的本地仓库由 git 维护的三棵“树”组成。
1、第一个是你的 工作目录,它持有实际文件;
2、第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动;
3、最后是 HEAD,它指向你最后一次提交的结果。
注意:工作目录对应工作区,暂存区对应index(一般存放在 ".git目录" 下的index文件(.git/index)中),head对应master。
注意:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。即版本库包含了暂存区和head。

二、Git 与 SVN 区别
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

三、Git 安装配置
在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
(一)Linux 平台上安装
1、Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。
2、使用的系统是 Centos/RedHat 安装命令为:
$ yum install curl-devel expat-devel gettext-devel \
  openssl-devel zlib-devel

$ yum -y install git-core
$ git --version
git version 1.7.1

(二)Windows 平台上安装
1、可以到 GitHub 的页面上下载 exe 安装文件并运行:安装包下载地址:https://gitforwindows.org/ ;
2、完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。
3、在开始菜单里找到"Git"->"Git Bash",会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。

(三)Git 配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
1、变量可以存放在以下三个不同的地方:
(1)/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
(2)~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
(3)当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

(四)用户信息
1、配置命令如下:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
注意:如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
注意:如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

(五)文本编辑器
1、设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置:$ git config --global core.editor emacs

(六)差异分析工具
1、在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
$ git config --global merge.tool vimdiff
注意:Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

(七)查看配置信息
1.要检查已有的配置信息,可以使用 git config --list 命令。
注意:有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

四、Git 工作流程
1、一般工作流程如下:
(1)克隆 Git 资源作为工作目录。(创建一个隐藏的.git目录即版本库)
(2)在克隆的资源上添加或修改文件。(暂存区)
(3)如果其他人修改了,你可以更新资源。
(4)在提交前查看修改。
(5)提交修改。
(6)在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

五、Git 创建仓库
可以使用一个已经存在的目录作为Git仓库。Git仓库就是使用git init命令创建一个隐藏的.git目录即版本库。
(一)git init命令
1、使用当前目录作为Git仓库,我们只需使它初始化。在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。
注意:不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录。
2、使用指定目录作为Git仓库:git init newrepo。

(二)git clone命令
使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
1、克隆仓库的命令格式为:git clone <repo>
2、如果我们需要克隆到指定的目录,可以使用以下命令格式:git clone <repo> <directory>
参数说明:repo:Git 仓库。directory:本地目录。
注意:git clone 时,可以所用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码。
例如:git clone git@github.com:fsliurujie/test.git --SSH协议

六、Git 基本操作
Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。
(一)获取与创建项目命令
1、用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。
2、在目录中执行 git init,就可以创建一个 Git 仓库了。所有项目的快照数据都存放在这里。

(二)复制克隆项目
1、使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
2、如果你需要与他人合作一个项目,或者想要复制一个项目,看看代码,你就可以克隆那个项目。 执行命令: git clone [url],其中[url] 为你想要复制的项目。
注意:默认情况下,Git 会按照你提供的 URL 所指示的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的项目名称。如果你想要一个不一样的名字, 你可以在该命令后加上你想要的名称。

(三)基本快照操作:git add
1、git add 命令可将该文件添加到缓存;
2、 git add . 命令来添加当前项目的所有文件。

(四)git status
1、git status 以查看在你上次提交之后是否有修改。
注意:加了 -s 参数,以获得简短的结果输出。如果没加该参数会详细输出内容。

(五)git diff
1、git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。
2、尚未缓存的改动:git diff;
3、查看已缓存的改动: git diff --cached;
4、查看已缓存的与未缓存的所有改动:git diff HEAD;
5、显示摘要而非整个 diff:git diff --stat。
注意:git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。

(六)git commit
1、git commit 将缓存区内容添加到仓库中。
注意:使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
2、使用 -m 选项以在命令行中提供提交注释。
3、git commit -a命令可以省略git add 提交缓存这一步骤。

(七)git reset HEAD
1、git reset HEAD 命令用于取消已缓存的内容。
注意:简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。

(八)git rm
1、要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作:git rm <file>。
2、如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f:git rm -f <file>。
3、如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:git rm --cached <file>。
注意:跟踪清单就是指暂存区(缓存区)中。
4、递归删除该目录中的所有子目录和文件:git rm –r * 。

(九)git mv
1、git mv 命令用于移动或重命名一个文件、目录、软连接。
2、git mv 文件名  重命名文件名。

七、Git 分支管理
(一)创建分支
1、创建命令:git branch (branchname)。
2、列出分支:git branch。
注意:没有参数时,git branch 会列出你在本地的分支。

(二)切换分支
1、切换分支命令:git checkout (branchname)。
2、使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。

(三)删除分支
1、删除分支命令:git branch -d (branchname)。

(四)分支合并
1、以使用以下命令将任何分支合并到当前分支中去:git merge 分支名。
注意:分支合并会导致分支名中的文件保留,主分支中的文件移除。
2、合并冲突:合并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。
注意:同名文件的内容合并会出现内容错误问题,需要手动修改。

八、Git 查看提交历史
(一)git log
1、在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。
2、git log --oneline选项来查看历史记录的简洁的版本。
3、git log --graph 选项,查看历史中什么时候出现了分支、合并。
4、git log --reverse 参数来逆向显示所有日志。
5、git log --author 查找指定用户的提交日志可以使用命令,例如:git log --author=Linus;
6、如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。

九、Git 标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。
(一)创建标签
1、 git tag -a 注解;Git 会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。
注意:-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。
2、使用git tag来查看所有标签。
3、git show 标签名;查看此版本所修改的内容。

(二)删除标签
1、git tag -d 标签名;删除指定标签名。

十、Git 远程仓库(Github)
Git 并不像 SVN 那样有个中心服务器。
目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。
(一)添加远程库
1、要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:git remote add [shortname] [url]。

(二)查看当前的远程库
1、要查看当前配置有哪些远程仓库,可以用命令:git remote。
注意:执行时加上 -v 参数,你还可以看到每个别名的实际链接地址。

(三)提取远程仓库
1、从远程仓库下载新分支与数据:git fetch 别名;
2、从远端仓库提取数据并尝试合并到当前分支:git merge [alias别名]/[branch分支] 。

(四)推送到远程仓库
1、推送你的新分支与数据到某个远端仓库命令:git push [alias别名] [branch]。

(五)删除远程仓库
1、删除远程仓库你可以使用命令:git remote rm [别名]。

十一、GitHub的替代品Coding仓库
CODING 宣布与腾讯云达成战略合作,发布以腾讯云云服务器为基础的国内第一款完全基于云端的 IDE 工具:Cloud Studio,此工具将提升软件开发效率、快速计算能力与云端协作能力。
Cloud Studio 为开发者提供了非常好的云端集成开发环境,让开发者可以通过在线的形式进行协作开发,管理自己的代码库,并且编辑和调试代码。
(一)代码迁移
1、将 GitHub 上的代码迁移到 CODING:
(1)创建 CODING 项目;
(2)将 GitHub 代码 Pull 到本地;
(3)本地关联 CODING 仓库,Push 代码到 CODING;

(二)具体流程:
1、创建 CODING 项目:登录 腾讯云开发者平台 注册账号,然后在项目管理页面中创建项目,选择开源许可证。
2、将 GitHub 代码 Pull 到本地:
登录 GitHub 选择你想要导入的仓库并复制仓库地址,在本地执行命令,将 GitHub 仓库代码拉下来:sudo git clone。
3本地关联 CODING 仓库,Push 代码到 CODING:
sudo git remote rm origin   //先删除原有远程仓库
sudo git remote add origin https://git.coding.net/xxx/xxx.git  //添加新的远程仓库
sudo git push -u origin master  //将本地代码推送给远程仓库

(三)CODING 仓库的免密码 Push/Pull
 CODING 是为我们提供了公钥验证的方式的,进入项目管理,在左侧选项卡中点击"公钥部署"按钮,然后点击右侧的"新建公钥部署"。这样就不需要每次输入账户密码了。

十二、Git 服务器搭建
远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费。就需要自己搭建一台Git服务器作为私有仓库使用。接下来我们将以 Centos 为例搭建 Git 服务器。
(一)安装Git
$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
$ yum install git
(二)创建证书登录
(三)初始化Git仓库

$ git init --bare runoob.git
(四)克隆仓库
$ git clone git@192.168.45.4:/home/gitrepo/runoob.git
注意:192.168.45.4 为 Git 所在服务器 ip ,你需要将其修改为你自己的 Git 服务 ip。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位远方的诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值