zoukankan      html  css  js  c++  java
  • 【Git】简易使用教程

    Git简介

    诞生

    简单的来说,就是为了托管庞大的Linux源码,开始选择了商用的版本控制系统BitKeeper,但是因为一系列操作,BitKeeper不让用了,所以Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!自己写了一个,还用了两周...

    对比

    记住分布式的比集中式的流弊就完事了。

    安装Git

    1. Linux系统
      sudo apt-get install git

    2. Windows
      直接到官网下载即可。

    3. Mac OS X
      安装homebrew,然后通过homebrew安装Git。或者,直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

    创建版本库

    1. 选择一个合适的地方,创建一个空目录
    2. 通过git init命令把这个目录变成Git可以管理的仓库
      git init
    3. 增加/修改文件并提交
      例如,用VSCode增加一个readme.md文件,然后
      git add readme.md
      git commit -m '我创建了readme.md文件'
      第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
      第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支;

    文件管理

    1. git status,可以让我们时刻掌握仓库当前的状态.

    2. **git diff --file_name **,顾名思义就是查看difference,显示的格式正是Unix通用的diff格式.

    3. git log,显示从最近到最远的提交日志.

    4. git reflog,查看命令历史,以便确定要回到未来的哪个版本.

    5. git reset --hard commit_id,HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭.

    6. git reset HEAD file_name,可以把暂存区的修改撤销掉(unstage),重新放回工作区,git reset既可以回退版本,也可以把暂存区的修改回退到工作区.

    7. git checkout -- file_name,命令把file_name文件在工作区的修改全部撤销,这里有两种情况:
      一种是file_name自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
      一种是file_name已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
      总之,就是让这个文件回到最近一次git commit或git add时的状态。

    8. 拉取指定文件:
      git fetch
      git checkout origin/master -- path/folder/filename

    9. 撤销commit:
      一般本地更改代码后,会进行如下操作:
      git add . // 添加所有文件
      git commit -m “本功能完成”
      但是,此时先
      撤回commit
      如何做呢?
      git reset --mixed HEAD^
      说明:指不删除工作空间改动代码,撤销commit,并且撤销git add . 操作。这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

      git reset --soft HEAD^ // HEAD^代表上一个版本,亦可以写成HEAD~1,同理撤回两次commit,可以使用HEAD~2
      说明:不删除工作空间改动代码,撤销commit,不撤销git add . 操作 。

      git reset --hard HEAD^
      说明:删除工作空间改动代码,撤销commit,撤销git add . 操作。注意完成这个操作后,就恢复到了上一次的commit状态。

      git commit --amend
      说明:修改commit注释,此时会进入默认vim编辑器,修改注释完毕后保存就好了。

    撤销修改小结:
    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

    远程代码库

    1. 创建SSH Key
      打开Git Bash,输入 ssh-keygen -t rsa -C "ouremail@example.com"
      回车执行后,在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
    2. 登录代码托管网站,在设置里增加SSH Key,填写id_rsa.pub文件的内容。

    分支管理

    1. git checkout,命令加上-b参数表示创建并切换,相当于以下两条命令:
      git branch dev
      git checkout dev
      例如:git checkout -b dev,创建了dev分支,然后切换到dev分支。
    2. git switch,最新版本的Git提供了这个新的命令来切换分支
    3. git branch -d dev,删除了dev分支
    4. git branch,会列出所有分支,当前分支前面会标一个*号。
    5. git merge,用于合并指定分支到当前分支
      例如:当前在master,使用git merge dev,则会把dev的内容合并到master。
    6. git log --graph,可以看到分支合并图。
    7. git branch -D ,如果要丢弃一个没有被合并过的分支,可以通过该命令强行删除。
    8. git rebase,可以把本地未push的分叉提交历史整理成直线。rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

    搭建Git服务器

    搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。
    假设你已经有sudo权限的用户账号,下面,正式开始安装。

    1. 安装git:
      $ sudo apt-get install git

    2. 创建一个git用户,用来运行git服务:
      $ sudo adduser git

    3. 创建证书登录:
      收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

    4. 初始化Git仓库:
      先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
      $ sudo git init --bare sample.git
      Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
      $ sudo chown -R git:git sample.git

    5. 禁用shell登录:
      出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
      git❌1001:1001:,,,:/home/git:/bin/bash
      改为:
      git❌1001:1001:,,,:/home/git:/usr/bin/git-shell
      这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

    6. 克隆远程仓库:
      现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
      $ git clone git@server:/srv/sample.git
      Cloning into 'sample'...
      warning: You appear to have cloned an empty repository.
      剩下的推送就简单了。

    7. 管理公钥
      如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
      这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

    8. 管理权限
      有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。

    参考链接

    廖雪峰官网-Git教程

  • 相关阅读:
    171. Excel Sheet Column Number (Easy)
    349. Intersection of Two Arrays (Easy)
    453. Minimum Moves to Equal Array Elements (Easy)
    657. Judge Route Circle (Easy)
    CSS笔记
    保存页面状态
    UI开发总结
    ubuntu 下配置munin
    反向代理配置
    JavaScript 高级程序设计第二版
  • 原文地址:https://www.cnblogs.com/parzulpan/p/11956768.html
Copyright © 2011-2022 走看看