Git简介:

  1. Git是一个分布式版本控制软件。

背景故事:

Linus在1991年创建了开源的Linux。

在2002年以前:世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后Linus本人通过手工方式合并代码。

2002年-2004年:(商用版本控制软件)BitKeeper的东家BitMover公司授权Linux社区免费使用这个版本控制系统。

2005年:Linus花了两周时间自己用C写了git(一个分布式版本控制软件)。

2008年:GitHub网站上线了,它为开源项目免费提供Git存储。

集中式版本控制软件

  1. 集中式代表:SVN

  2. 集中式特点:

    1. 版本库是集中存放在中央服务器的。

    2. 必须实时联网才能工作。

分布式版本控制软件

  1. 分布式代表:Git

  2. 分布式特点:

    1. 个人电脑都可以作为版本库。

    2. 速度快,使用简单。

    3. 不必实时联网。

    4. Git下载安装

      1. windows版本下载地址:https://git-scm.com/download/win

      使用前准备

      1. 1. 安装完成后,在开始菜单里找到“Git”->“Git Bash”,弹出命令行窗口,说明Git安装成功。
        2. 安装Git之后,你要做的第一件事情就是去配置你的名字和邮箱,因为每一次提交都需要这些信息。
      1. $ git config --global user.name "Your Name"
        $ git config --global user.email "Your email@example.com"
      • 这个命令,会在“ ~/.gitconfig”中以如下形式输出设置文件。

      1. [user]
        name = Your_Name
        email = Your_email@example.com
      • 将 color.ui 设置为 auto 可以让命令的输出拥有更高的可读性。

      1. $ git config --global color.ui auto
      • ~/.gitconfig”中会增加下面一行。


      1. [color]
        ui = auto

我只能说实验室的台式机有问题,安装git失败,原因尚不明确,百度没有

然后跟了敲了一遍代码,发现还是没明白是干嘛的。一点点吧,就是上传文件,上传到同一个地方,因为还指明了自己的名字和邮箱

再往下探索吧

讲得一脸懵  到头来也不知道Git干嘛的   不过然自己又一步的认识了GitHub。

通过本地的Git  和pychrom连接GitHub  托管源码的网站   用了一个比喻  百度网盘,一个存放文件资源的地方。而GitHub就是托管源码的地方

名词解释

工作区

  1. 存放源码的文件夹。

版本库

  1. 版本库又名仓库,英文名repository
    这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪。
    以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"

    通过"git init"命令创建。".git"隐藏目录就是版本库。

暂存区

  1. ".git"目录下有一个"index"/"stage"的文件即暂存区。

分支

默认情况下,Git会自动为我们创建一个主分支(master)。
".git"下有个名为"HEAD"的文件指向master分支。
最新版本代码需要更新到"当前分支"。

创建版本库

# 创建文件夹
$ mkdir test

# 进入当前目录
$ cd test

# 查看目录
$ pwd

# 将当前目录变成Git可管理的版本库又名仓库,英文名repository
$ git init
Initialized empty Git repository in D:/Tools/Git/test/.git/

常用命令

文件添加操作
  1. # 1. 工作区中创建新文件hello.py
      $ vi hello.py

    # 2. 查看文件状态
      $ git status

    # 3. 将源码拷贝到暂存区
      $ git add hello.py

    # 4. 将暂存区移动到当前分支
      $ git commit -m "创建新文件hello.py"

    # 5. 查看状态
      $ git status
      On branch master
      nothing to commit, working tree clean

文件删除操作

  1. # 1. 删除工作区中的文件
      rm hello.py
       
    # 2. 删除暂存区中的文件
      git rm hello.py

    # 3. 删除当前分支中的文件
      git commit -m '描述信息'


文件修改操作

  1. # 修改文件
      $ vi hello.py

    # 查看状态
      $ git status

    # 添加暂存区
      $ git add hello.py
       
    # 添加版本库
      $ git commit -m '描述信息'
       
       
    # 添加并提交到分支中
      $ git commit -am '描述信息'

文件撤销操作

  1. # 查看工作区和版本库里面最新版本的区别
      $ git diff HEAD -- hello.py
       
    方式1:可以撤销未被追踪的文件
       
    # 丢弃工作区的修改
      $ git checkout -- hello.py
       
    方式2:可以撤销到任意版本
      # 查看操作日志
      $ git log
      commit c4e993ddb36d77710dad2c7c8c18130f9a761946 (HEAD -> master)

      $ git log --oneline
      c4e993d (HEAD -> master) first add
       
     
       
      # 回退到某个版本2
      $ git reset --hard c4e993ddb36d77710dad2c7c8c18130f9a761946


      #回退到上一个版本
      git reset HEAD
       
       
       


它会继承master这个总分支的内容,当你修改了相同的文件,合并时就会有冲突

这是要手动的解决,看是否合并

分支就是进行分层管理的意思吧,分成很多小的模块让每个人负责一个小模块的东西

分支定义

  1. 分支可以理解成 独立开发功能的 小房间。

分支操作

  1. # 创建分支
      $ git branch 分支名
       
    # 查看分支
      $ git branch

    # 切换分支
      $ git checkout 分支名

    # 创建+切换分支
      $ git checkout -b 分支名
       
    # 合并某分支到当前分支
      $ git merge 分支名
       
    # 删除某分支
      $ git branch -d 分支名
       
       
    #查看日志记录(以图形形式展现)
    $ git log --graph --pretty=oneline --abbrev-commit

合并分支解决冲突

当前分支1 分支2 前提分支1和分支2都进行了代码修改。

将分支2的内容合并到分支1

# 1. 切换到当前分支1
$ git checkout 分支1

# 2. 和分支2进行合并
$ git merge 分支2

# 3. 执行第二步后出现冲突(CONFLICT)
$ git merge dev
Auto-merging hello.py
CONFLICT (content): Merge conflict in hello.py
Automatic merge failed; fix conflicts and then commit the result.

# 4. 解决方案:
print 'first'
<<<<<<< HEAD
print 'master second'
=======
print 'dev second'
>>>>>>> dev

1. 编辑合并分支1和分支2的内容
2. 修改好之后,$ git add 文件名
3. $ git commit -m "描述信息"

采用快进模式合并的缺陷

  1. 删除dev分支后会丢失该分支的所有提交记录。

采用非快进模式合并分支

#新建并切换分支
$ git checkout -b dev

#添加内容到暂存区
$ git add readme.txt

#提交到dev分支
$ git commit -m "add merge"

#合并分支(ff= fast forward 快进模式)
$ git merge --no-ff -m "merge with no-ff" dev

#查看日志记录(以图形形式展现)
$ git log --graph --pretty=oneline --abbrev-commit

  1. Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。
    github网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

    github官网:https://github.com/

远程库

  1. 1. github版本库即为远程库。

本地库

  1. 1. 本地创建的Git版本库即为本地库。

使用说明

  1. 1. 先在github官网中注册账户。
    2. 创建SSH key
      由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的。
      Windows下打开Git Bash,创建SSH key
      $ ssh-keygen -t rsa -C "youremail@example.com"

    3. 在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件(密钥对)。
      用户主目录:C:\Users\Administrator
       
    4. 登陆GitHub,打开"Account settings""SSH Keys"页面。

    5. "Add SSH Key",填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

本地库 关联 远程库

  1. origin:默认远程库名称
  1. # 在本地库当前分支
      $ git remote add origin git@github.com:pythonde/newRepository.git

上传数据到远程库

  1. $ git push -u origin dev
    The authenticity of host 'github.com (13.250.177.223)' can't be established.
    RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
    To github.com:pythonde/newRepository.git
    ! [rejected]       master -> master (fetch first)
    error: failed to push some refs to 'git@github.com:pythonde/newRepository.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.

远程库更新本地库

  1. $ git pull --rebase origin dev

    From github.com:pythonde/newRepository
    * branch           dev       -> FETCH_HEAD
    First, rewinding head to replay your work on top of it...
    Applying: first add
    Applying: dev second
    Applying: test2 dev third

成功将本地库内容上传到远程库

  1. $ git push -u origin dev

    Counting objects: 9, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (7/7), done.
    Writing objects: 100% (9/9), 852 bytes | 852.00 KiB/s, done.
    Total 9 (delta 0), reused 0 (delta 0)
    To github.com:pythonde/newRepository.git
      a69bffd..da7dd11 dev -> dev
    Branch 'dev' set up to track remote branch 'dev' from 'origin'.

注意事项

  1. 1. 远程操作git push / git pull 时,本地库和远程库分支名相同。
    2. 第一次push时:$ git push -u origin dev
    3. 之后只需要简写:$ git push origin dev
    4. 远程库分支之间的合并,创建一个pull request进行合并。

查看远程库信息

  1. $ git remote -v

删除连接远程库

  1. $ git remote rm origin

从远程库下载源码到本地库

  1. $ git clone git@github.com:pythonde/newRepository.git
  2.  

Git支持多协议方式

  1. Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
    使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令。
    但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

加密方式:

  1. 对称加密:性能高

  1.   用什么加密就用什么解密(异或)
    '123'^'456'--->'4321432'   加密
    '4321432'^'456'--->'123'   解密
  1. 非对称加密:安全性高(支付宝采用下面加密方式)公钥加密,私钥解密`` 客户端: 服务器端: 服务器端的公钥 服务器端的私钥 客户端的私钥 客户端的公钥``

SSH密钥对(公钥+私钥)

  1. 客户端:git很简单-密钥配对(验证用户时使用SSH),git服务器会随机生成一个对称的密钥。

    发给客户端,客户端通过对称的密钥对数据传输的时候使用的是对称加密。

多人协作开发实现步骤

  1. 1. 由张三上传一个基本版本到张三的github远程库master上。

    2. 李四登录github账户访问remoteb版本库。fork 将张三的版本转载到李四的个人github中。

    3.李四:在github上新建一个分支dev 本地库中也得新建一个dev分支

    4.李四:将本地库的dev分支和远程库的dev分支进行关联

本地库连接远程库

  1. 1. github注册账户

    2. 创建远程版本库

    3. 本地库和远程库进行关联
  1. git remote -v
       
    git remote add origin git@github.com:pythonde/remoteRepository.git
  1. 更新本地库

  1. git pull --rebase origin master
       
    git status
       
    git add hello.py
       
    git commit -m '描述信息'

5.将本地库内容上传至远程库

  1. git push -u origin master
       

2019.03.25 git的更多相关文章

  1. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  2. ARTS Challenge- Week 1 (2019.03.25~2019.03.31)

    1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...

  3. zabbix学习笔记----概念----2019.03.25

    1.zabbix支持的通讯方式 1)agent:专用的代理程序,首推: 2)SNMP:  3)SSH/Telnet:  4)IPMI,通过标准的IPMI硬件接口,监控被监控对象的硬件特性. 2)zab ...

  4. 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)

    传送门 题解可以参见zjjzjjzjj神仙的,写的很清楚. 代码: #include<bits/stdc++.h> #define ri register int using namesp ...

  5. 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)

    传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...

  6. 2019.03.25 bzoj4567: [Scoi2016]背单词(trie+贪心)

    传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s ...

  7. 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)

    传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...

  8. 2019.03.25 bzoj2329: [HNOI2011]括号修复(fhq_treap)

    传送门 题意简述: 给一个括号序列,要求支持: 区间覆盖 区间取负 区间翻转 查询把一个区间改成合法括号序列最少改几位 思路: 先考虑静态的时候如何维护答案. 显然把所有合法的都删掉之后序列长这样: ...

  9. 2019.03.25 NOIP训练 匹配(match)(贪心)

    题意简述: 思路: 直接考虑把人和物品都看成二维平面上面的a,ba,ba,b两类点,然后一个aaa和bbb匹配的条件是xa≤xb&&ya≤ybx_a\le x_b\&\& ...

随机推荐

  1. Jenkins解决无法获取插件的办法(升级站点目录)

    Jenkins解决无法获取插件的办法 可能是由于Jenkins的更新网站被QIANG,因此,请替换插件的服务器地址: http://mirror.xmission.com/jenkins/update ...

  2. PAT甲级1075 PAT Judge

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805393241260032 题意: 有m次OJ提交记录,总共有k道 ...

  3. tensorflow的variable的eval()和read_eval()有什么不同

    eval()返回的数值标量 read_eval()返回的是这个变量的tensor,类型是read 直接上代码: def tensoflow_test(): t = tf.Variable(initia ...

  4. CSS 小技巧

    CSS 小技巧 一.边框内圆角 我们在设计例如按钮等控件的时候,会遇到这样的设计:只有内侧有圆角,而边框或者描边的四个角还是保持直角的形状,用以下代码可以轻松的实现. #wrapper { width ...

  5. C语言中gets(), scanf()区别

    C语言中gets(), scanf()区别 相同点: gets()和 scanf() 1.函数都可用于输入字符串 2.都在stdio.h头文件中定义. 3.字符串接受字符结束后自动加'\0' 不同点: ...

  6. py文件传输

    本文参考:http://blog.163.com/kongdelu2009@yeah/blog/static/1119952072009102562126194/ 发送端程序: # -*- codin ...

  7. 【PyQt5-Qt Designer】QLineEdit 文本输入

    QLineEdit 文本输入 一.QlineEdit 基本方法 setAlignment() 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右 ...

  8. Automation服务器不能创建对象(金税盘)

    1. 安装防伪开票组件接口软件: 2. 把接口的注册文件放到%防伪开票系统的安装目录% \BIN下 3. 把%防伪开票系统的安装目录%\bin下的TaxCardX.dll文件复制至 c:\window ...

  9. PHP三种运行方式(转载)

    三种运行方式:mod_php5.cgi.fast-cgi 1. 通过HTTPServer内置的模块来实现, 例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支 ...

  10. Vue的双向数据绑定原理是什么?

    vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调. ...