美文网首页
Git教程笔记

Git教程笔记

作者: Haleng | 来源:发表于2019-12-13 17:57 被阅读0次

    Git教程笔记

    Git教程-菜鸟教程

    1. Git 安装配置

    1.1 Linux | Windows | Mac 平台上安装(略)

    Git 各平台安装包下载地址为:http://git-scm.com/downloads

    1.2 Git 配置

    Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量,这些环境变量,决定了 Git 在各个环节的具体工作方式和行为;

    这些环境变量存放在以下三个不同的地方:

    • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置;若使用 git config 时用 --system 选项,读写的就是这个文件;
    • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户;若使用 git config 时用 --global 选项,读写的就是这个文件;
    • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效;每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量;

    1.2.1 用户信息

    # 配置个人的用户名称和电子邮件地址
    $ git config --global user.name "runoob"
    $ git config --global user.email test@runoob.com
    

    如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息;
    如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里;

    在项目中遇到了这样的问题,只要切换了不同项目(用户名称和电子邮件不同),就需要配置 SSH 秘钥才能成功上传代码,解决该问题方式就是对特定的项目中使用其他名字或者电邮,不加 --global 选项

    1.2.2 文本编辑器

    # Git默认使用的文本编辑器是 `Vi` 或者 `Vim`,如配置 Emacs 文本编辑器
    $ git config --global core.editor emacs
    

    1.2.3 差异分析工具

    # 在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff
    $ git config --global merge.tool vimdiff
    

    Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息;当然你也可以指定使用自己开发的工具,具体怎么做可以参阅第七章;

    1.2.4 查看配置信息

    # 要检查已有的配置信息,使用 git config --list 命令;若看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig)
    $ git config --list
    # 也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可
    $ git config user.name
    

    2. Git 工作流程

    Git 的一般工作流程如下:

    1. 克隆 Git 资源作为工作目录;
    2. 在克隆的资源上添加或修改文件;
    3. 如果其他人修改了,你可以更新资源;
    4. 在提交前查看修改;
    5. 提交修改;
    6. 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;
    _工作区暂存区版本库的_1557546408_28585.png

    3. Git 工作区、暂存区和版本库

    3.1 三者的基本概念

    • 工作区:就是你在电脑里能看到的目录;
    • 暂存区:英文叫 stage或index ;一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);
    • 版本库:工作区有一个隐藏目录 .git ,这个不算工作区,而是Git的版本库;

    3.2 三者之间的关系

    [图片上传失败...(image-6ea622-1576231012220)]

    图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区stage, index),标记为 "master" 的是 master 分支所代表的目录树;图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标";所以图示的命令中出现 HEAD 的地方可以用 master 来替换;图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

    4. Git 创建仓库

    4.1 git init

    # 使用当前目录作为Git仓库,我们只需使它初始化,命令执行完后会在当前目录生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变
    git init
    # 指定目录作为Git仓库
    git init newrepo
    
    # 以下命令将目录下以 .c 结尾及 README 文件提交到仓库中
    $ git add *.c
    $ git add README
    $ git commit -m '初始化项目版本'
    

    4.2 git clone

    # 从现有 Git 仓库中拷贝项目,repo:Git 仓库;directory:本地目录。
    git clone <repo>
    # 如果需要克隆到指定的目录,可以使用以下命令格式
    git clone <repo> <directory>
    

    5. Git 基本操作

    Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比;

    5.1 获取与创建项目命令

    # 用 git init 在目录中创建新的 Git 仓库
    $ git init
    # 用 git clone 拷贝一个 Git 仓库到本地
    $ git clone [url] [dirName]
    

    5.2 基本快照

    5.1.1 git add

    # git add 命令可将该文件添加到缓存, *或. 表示添加所有新增文件,也可以是具体的文件
    $ git add *
    

    5.1.2 git status

    # git status 命令用于查看项目的当前状态,查看在上次提交之后是否有修改,-s 表示以简短的结果输出
    $ git status -s
    

    5.1.3 git diff

    # 查看执行 git status 的结果的详细信息,显示已写入缓存与已修改但尚未写入缓存的改动的区别
    $ git diff # 尚未缓存的改动
    $ git diff --cached # 查看已缓存的改动
    $ git diff HEAD # 查看已缓存的与未缓存的所有改动
    $ git diff --stat # 显示摘要而非整个 diff
    

    5.1.4 git commit

    # 注意 Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址,注意 --global 参数的使用
    $ git config --global user.name 'runoob'
    $ git config --global user.email test@runoob.com
    # 使用 git add 命令将想要快照的内容写入缓存区
    $ git add .
    # 执行 git commit 将缓存区内容添加到仓库中,使用 -m 选项以在命令行中提供提交注释
    $ git commit -m '提交的注释信息'
    # 若觉得 git add 提交缓存的流程繁琐,Git 也允许你用 -a 选项跳过这一步
    git commit -am '提交的注释信息(此前不需要 git add )'
    

    5.1.5 git reset HEAD

    # 取消已缓存的文件内容;执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存
    $ git reset HEAD [fileName]
    

    5.1.6 git rm

    若只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示;要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交:

    # 删除工作区目录文件,从已跟踪文件清单中移除
    $ git rm <file>
    # 若删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
    $ git rm -f <file>
    # 若把文件从暂存区域移除,但仍然希望保留在当前工作目录中;换句话说,仅是从跟踪清单中删除,使用 --cached 选项
    $ git rm --cached <file>
    # 递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件
    $ git rm –r *
    

    5.1.7 git mv

    # git mv 命令用于移动或重命名一个文件、目录、软连接
    $ git mv [filename1]  [filename2]
    

    6. Git 分支管理

    • 创建分支命令:git branch (branchname)
    • 切换分支命令:git checkout (branchname)
    • 合并分支命令:git merge

    6.1 列出、新建、切换分支

    # 列出分支基本命令,不要加参数
    $ git branch
    # 加上参数就是表示创建一个分支,分支名就是参数值
    $ git branch (branchname)
    # 切换到某一分支下
    $ git checkout (branch)
    # 创建新分支并立即切换到该分支下
    $ git checkout -b (branchname)
    

    6.2 删除分支

    # 删除分支命令
    $ git branch -d (branchname)
    

    6.3 分支合并

    # 使用以下命令将任何分支合并到当前分支中去
    $ git merge (branchname)
    

    6.4 合并冲突

    在 Git 中,若合并冲突出现了,我们需要手动去修改它,在修改完成后,我们可以用 git add 要告诉 Git 文件冲突已经解决,然后再使用 git commit 提交结果;

    7. Git 查看提交历史

    # 使用 git log 命令列出历史提交记录
    $ git log
    # 可以用 --oneline 选项来查看历史记录的简洁的版本
    $ git log --oneline
    # 还可以用 --graph 选项,查看历史中什么时候出现了分支、合并,开启了拓扑图选项
    $ git log --graph
    # 也可以用 --reverse 参数来逆向显示所有日志
    $ git log --reverse --oneline
    # 只想查找指定用户的提交日志可以使用命令:git log --author , 例如,比方说我们要找 Git 源码中 Linus 提交的部分
    $ git log --author=Linus --oneline -5
    # 如果要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after ; 例如,如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(还用了 --no-merges 选项以隐藏合并提交)
    $ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
    

    8. Git 标签

    # 如果项目达到一个重要的阶段,并希望永远记住那个特别的提交快照,使用 `git tag` 给它打上标签; -a 选项意为"创建一个带注解的标签"; -m 选项为添加的标签注释内容
    $ git tag -a v1.0
    # 查看项目中的标签
    $ git log --decorate
    # 若忘了给某个提交打标签,又将它发布了,我们可以给它追加标签, 85fc7e7 为那次修改发布的哈希值
    $ git tag -a v0.9 85fc7e7
    $ git log --oneline --decorate --graph
    # 指定标签信息命令
    $ git tag -a <tagname> -m "标签注释内容"
    # PGP签名标签命令:
    $ git tag -s <tagname> -m "标签注释内容"
    

    9. Git Github

    9.1 添加远程库

    # 要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:
    $ git remote add [shortname] [url]
    

    配置 SSH 秘钥连接 GitHub 远程库步骤:

    1. 执行以下命令生成 SSH Key$ ssh-keygen -t rsa -C "youremail@example.com";其中邮件名称是你在 Github 上注册的邮箱;
    2. 接着会要求确认路径和输入密码,这使用默认的一路回车就行,会在~/ 目录下生成 .ssh 文件夹,如C:\Users\<username>\.ssh,进去打开 id_rsa.pub,复制里面的 key
    3. 回到 github 上,进入 Account => Settings(账户配置),新增 SSH key
    4. 为了验证是否成功,输入以下命令:$ ssh -T git@github.com

    9.2 查看当前的远程库

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

    9.3 提取远程仓库

    Git 有两个命令用来提取远程仓库的更新:

    # 1. 从远程仓库下载新分支与数据,该命令执行完后需要执行git merge 远程分支到你所在的分支
    $ git fetch
    # 2. 从远端仓库提取数据并尝试合并到当前分支,该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支
    $ git merge
    

    假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支;

    9.3.1 推送到远程仓库

    # 推送你的新分支与数据到某个远端仓库命令,该命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支
    $ git push [alias] [branch]
    

    9.3.2 删除远程仓库

    # 删除远程仓库你可以使用命令:
    $ git remote rm [alias]
    # 例如:在原有的远程仓库上新增一个,然后再删除
    # 1. 先查看当前配置有哪些远程仓库
    $ git remote -v
    # 2. 添加仓库 origin2,再查看远程仓库
    $ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git
    $ git remote -v
    # 删除仓库 origin2,再查看远程仓库
    $ git remote rm origin2
    $ git remote -v
    

    10. Git CODING

    由于 GitHub 的访问速度太慢,常还会出现丢包、失去连接等情况;因而使用国内服务器的托管平台 CODING

    GitHub 上的代码迁移到 CODING 的步骤:

    1. 创建 CODING 项目;
    2. 将 GitHub 代码 Pull 到本地;
    3. 本地关联 CODING 仓库,Push 代码到 CODING;
      • 首先执行命令查看当前配置的远程仓库:git remote -v;
      • 接下来执行以下命令,来关联 CODING 远程仓库,要先删除现有的仓库关联,在将仓库关联到 CODING 的地址,并且将代码 Pushmaster 分支:
    $ git remote rm origin
    $ git remote add origin https://git.coding.net/xxx/xxx.git
    $ git push -u origin master
    

    CODING 仓库的免密码 Push/Pull:配置SSH Key

    11. Git 服务器搭建(没有动手测试)

    Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费,因而我们就需要自己搭建一台Git服务器作为私有仓库使用;接下来我们将以 Centos 为例搭建 Git 服务器:

    11.1 安装Git

    $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
    $ yum install git
    # 接下来我们 创建一个git用户组和用户,用来运行git服务
    $ groupadd git
    $ useradd git -g git
    

    11.2 创建证书登录

    # 收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个,若没有就创建它;
    $ cd /home/git/
    $ mkdir .ssh
    $ chmod 755 .ssh
    $ touch .ssh/authorized_keys
    $ chmod 644 .ssh/authorized_keys
    

    11.3 初始化Git仓库

    # 首先选定一个目录作为Git仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令
    $ cd /home
    $ mkdir gitrepo
    $ chown git:git gitrepo/
    $ cd gitrepo
    
    $ git init --bare runoob.git
    Initialized empty Git repository in /home/gitrepo/runoob.git/
    # 以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git
    $ chown -R git:git runoob.git
    

    11.4 克隆仓库

    # 192.168.45.4 为 Git 所在服务器 ip ,需要将其修改为你自己的 Git 服务 ip;
    $ git clone git@192.168.45.4:/home/gitrepo/runoob.git
    

    这样我们的 Git 服务器安装就完成;

    相关文章

      网友评论

          本文标题:Git教程笔记

          本文链接:https://www.haomeiwen.com/subject/dsqqnctx.html