zoukankan      html  css  js  c++  java
  • GIT使用—创建并使用远程版本库

    远程版本库

    (1)创建一个裸版本库

    [root@localhost tmp]# git init fluff2
    Initialized empty Git repository in /tmp/fluff2/.git/
    [root@localhost tmp]# ls
    fluff2
    [root@localhost tmp]# git init --bare fluff
    Initialized empty Git repository in /tmp/fluff/
    [root@localhost tmp]# ls
    fluff  fluff2
    

    (2)远程版本库

    Git使用远程版本库和远程追踪分支来引用另一个版本库,并有助于与该版本库建立连接。

    常见命令:

    • git fetch 从远程版本库抓取对象及其相关的元数据
    • git pull 跟fetch类似,但合并修改到相应本地分支
    • git push 转移对象及其相关的元数据到远程版本库
    • git ls-remote 显示一个给定的远程版本库的引用列表

    分支类别:

    • 远程追踪分支与远程版本库相关联,专门用来追踪远程版本库中每个分支的变化。
    • 本地追踪分支与远程追踪分支相配对。它是一种集成分支,用于收集本地开发和远程追踪分支中的变更。
    • 任何本地的非追踪分支通常称为特性或开发分支。
    • 为了完成命名空间,远程分支是一个设在非本地的远程版本库的分支。

    示例:
    创建权威版本库public_html.git
    用一个初始版本库填充Depot

    [root@localhost tmp]# cd Depot/
    [root@localhost Depot]# git clone --bare /root/public_html public_html.git
    Initialized empty Git repository in /tmp/Depot/public_html.git/
    [root@localhost Depot]# ls
    public_html.git
    
    [root@localhost Depot]# cd /root/public_html/
    [root@localhost public_html]# ls   #有工作目录
    foo.html  index.html  yes.html
    [root@localhost public_html]# ls -aF
    ./  ../  foo.html  .git/  index.html  yes.html
    [root@localhost public_html]# ls -aF .git
    ./   BISECT_ANCESTORS_OK  BISECT_NAMES  branches/       config       HEAD    index  logs/     ORIG_HEAD
    ../  BISECT_LOG           BISECT_START  COMMIT_EDITMSG  description  hooks/  info/  objects/  refs/
    [root@localhost public_html]# cd /tmp/Depot/
    [root@localhost Depot]# ls -aF public_html.git/   #没有工作目录
    ./  ../  branches/  config  description  HEAD  hooks/  info/  objects/  packed-refs  refs/
    
    [root@localhost Depot]# cd public_html.git/
    [root@localhost public_html.git]# cat config 
    [core]
    	repositoryformatversion = 0
    	filemode = true
    	bare = true
    

    因为在克隆过程中使用了--bare选项,所以Git没有引入一般默认的origin远程版本库。

    制作自己的origin远程版本库

    [root@localhost public_html.git]# cd /root/public_html/
    [root@localhost public_html]# cat .git/config 
    [core]
    	repositoryformatversion = 0
    	filemode = true
    	bare = false
    	logallrefupdates = true
    [root@localhost public_html]# git remote add origin /tmp/Depot/public_html
    [root@localhost public_html]# cat .git/config
    [core]
    	repositoryformatversion = 0
    	filemode = true
    	bare = false
    	logallrefupdates = true
    [remote "origin"]
    	url = /tmp/Depot/public_html
    	fetch = +refs/heads/*:refs/remotes/origin/*
    

    在远程版本库中建立新的远程追踪分支,代表来自远程版本库的分支,以完成建立origin远程版本库进程

    [root@localhost public_html]# git branch -a
    * master
      newtest
      testing
    [root@localhost public_html]# git remote update
    Fetching origin
    From /tmp/Depot/public_html
     * [new branch]      master     -> origin/master
     * [new branch]      newtest    -> origin/newtest
     * [new branch]      testing    -> origin/testing
    [root@localhost public_html]# git branch -a
    * master
      newtest
      testing
      remotes/origin/master  #远程追踪分支:掌握和跟踪远程版本苦苦master分支中的提交
      remotes/origin/newtest
      remotes/origin/testing
    

    在版本库中进行开发

    [root@localhost public_html]# git show-branch -a
    * [master] add test.txt
     ! [newtest] newtest yes
      ! [testing] newtest yes
       ! [origin/master] add test.txt
        ! [origin/newtest] newtest yes
         ! [origin/testing] newtest yes
    ------
     ++ ++ [newtest] newtest yes
     ++ ++ [newtest^] removed test.txt
    *+++++ [master] add test.txt
    [root@localhost public_html]# vim fuzzy.txt
    [root@localhost public_html]# cat fuzzy.txt 
    Fuzzy Wuzzy was a bear
    Fuzzy Wuzzy had no hair
    Fuzzy Wuzzy wasn't very fuzzy,
    Was he?
    [root@localhost public_html]# git add fuzzy.txt 
    [root@localhost public_html]# git commit -m "add fuzzy"
    [master 5571b42] add fuzzy
     1 files changed, 4 insertions(+), 0 deletions(-)
     create mode 100644 fuzzy.txt
    [root@localhost public_html]# git show-branch -a
    * [master] add fuzzy
     ! [newtest] newtest yes
      ! [testing] newtest yes
       ! [origin/master] add test.txt
        ! [origin/newtest] newtest yes
         ! [origin/testing] newtest yes
    ------
    *      [master] add fuzzy
     ++ ++ [newtest] newtest yes
     ++ ++ [newtest^] removed test.txt
    *+++++ [origin/master] add test.txt
    

    推送变更

    [root@localhost public_html]# git push origin master
    Counting objects: 4, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 362 bytes, done.
    Total 3 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    To /tmp/Depot/public_html
       b0b257c..5571b42  master -> master
    

    Git提取master分支的变更,将它们捆绑在一起,发送到名为origin的远程版本库中。

    探测远程版本库并验证是否更新

    在本地
    [root@localhost public_html]# cd /tmp/Depot/public_html.git/
    [root@localhost public_html.git]# git show-branch
    ! [master] add fuzzy
     * [newtest] newtest yes
      ! [testing] newtest yes
    ---
    +   [master] add fuzzy
     *+ [newtest] newtest yes
     *+ [newtest^] removed test.txt
    +*+ [master^] add test.txt
    
    在不同物理机
    [root@localhost public_html.git]# git ls-remote origin
    然后用git rev-parse HEAD或git show ID来展示那些与当前本地分支匹配的提交ID
    

    添加新的开发人员

    [root@localhost tmp]# mkdir bobo
    [root@localhost tmp]# ls
    bobo  Depot  fluff  fluff2
    [root@localhost tmp]# cd bobo/
    [root@localhost bobo]# ls
    [root@localhost bobo]# git clone /tmp/Depot/public_html.git
    Initialized empty Git repository in /tmp/bobo/public_html/.git/
    [root@localhost bobo]# ls
    public_html
    [root@localhost bobo]# cd public_html/
    [root@localhost public_html]# ls   #这里因为这前建立origin时原版本库在newtest分支上
    foo.html  index.html  yes.html
    [root@localhost public_html]# git branch
    * newtest
    [root@localhost public_html]# ls -aF
    ./  ../  foo.html  .git/  index.html  yes.html
    [root@localhost public_html]# cd .git/
    [root@localhost .git]# ls
    branches  config  description  HEAD  hooks  index  info  logs  objects  packed-refs  refs
    [root@localhost .git]# cat config 
    [core]
    	repositoryformatversion = 0
    	filemode = true
    	bare = false
    	logallrefupdates = true
    [remote "origin"]
    	fetch = +refs/heads/*:refs/remotes/origin/*
    	url = /tmp/Depot/public_html.git
    [branch "newtest"]   #此时有一个默认的远程版本库
    	remote = origin
    	merge = refs/heads/newtest
    [root@localhost .git]# git remote show origin
    * remote origin
      Fetch URL: /tmp/Depot/public_html.git
      Push  URL: /tmp/Depot/public_html.git
      HEAD branch (remote HEAD is ambiguous, may be one of the following):
        newtest
        testing
      Remote branches:
        master  tracked
        newtest tracked
        testing tracked
      Local branch configured for 'git pull':
        newtest merges with remote newtest
      Local ref configured for 'git push':
        newtest pushes to newtest (up to date)
    
    [root@localhost public_html]# git branch -a
    * newtest
      remotes/origin/HEAD -> origin/newtest  #远程版本库认为的活动分支
      remotes/origin/master
      remotes/origin/newtest
      remotes/origin/testing
    

    修改提交,推送到仓库中的主版本库

    [root@localhost public_html]# cat yes.html 
    AAAAAA
    [root@localhost public_html]# vim yes.html 
    [root@localhost public_html]# cat yes.html 
    BBBBBBB
    
    [root@localhost public_html]# git diff
    diff --git a/yes.html b/yes.html
    index b068058..6a4ca1b 100644
    --- a/yes.html
    +++ b/yes.html
    @@ -1 +1 @@
    -AAAAAA
    +BBBBBBB
    [root@localhost public_html]# git commit yes.html 
    [newtest c24a693] change yes.html
     1 files changed, 1 insertions(+), 1 deletions(-)
    
    [root@localhost public_html]# git push
    Counting objects: 5, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 253 bytes, done.
    Total 3 (delta 1), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    To /tmp/Depot/public_html.git
       b488b19..c24a693  newtest -> newtest
    

    获取版本库更新
    (当其他人更新了文件,这时你需要刷新克隆版本库)

    [root@localhost public_html]# git pull
    

    pull意味着先执行fetch,然后执行merge或rebase。
    push和fetch都负责在版本库之间传输数据,但方向相反。

    (3)图解远程版本库开发周期
    最初的开发

    克隆产生两个单独的版本库

    交替的历史记录

    获取交替记录

    合并历史记录

    推送合并后的历史记录

  • 相关阅读:
    Poj 2017 Speed Limit(水题)
    Poj 1316 Self Numbers(水题)
    Poj 1017 Packets(贪心策略)
    Poj 1017 Packets(贪心策略)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2000 Gold Coins(水题)
    poj 2000 Gold Coins(水题)
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/8482423.html
Copyright © 2011-2022 走看看