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)图解远程版本库开发周期
    最初的开发

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

    交替的历史记录

    获取交替记录

    合并历史记录

    推送合并后的历史记录

  • 相关阅读:
    OUT还开通博客!
    《超越想象——Windows_8应用设计与开发》
    kissy初体验(一)
    网页乱码!!!
    一起学习extjs()
    程序员你不懂爱,博客园就要倒下来。。
    如何用WordPress做网站?
    程序员,你懂的.
    Windows 8 应用开发技术资源
    开源easyui.selectdialog
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/8482423.html
Copyright © 2011-2022 走看看