远程版本库

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

最初的开发

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

交替的历史记录



获取交替记录

合并历史记录

推送合并后的历史记录

GIT使用—创建并使用远程版本库的更多相关文章

  1. Git远程版本库

    目前为止,所有的Git操作都是在一个本地版本库中.现在是时候来体验Git分布式的特性了. 说到远程版本库,大家最为熟悉的就是GitHub了,它实际上就相当于一个远程版本库,托管着所有的本地版本库的提交 ...

  2. git 创建远程版本库(亲测有效)

    一.github远程版本库 1.创建SSH Key(windows)   ssh-keygen -t rsa -C "youremail@example.com"   2.连接版本 ...

  3. 关于Git远程版本库

    Git作为分布式版本库控制系统,每个人都是本地版本库的主人,可以在本地的版本库中随心所欲的创建分支和里程碑. 当需要多人协作时,问题就出现了: 1.如何避免因为用户把所有的本地分支都推送到了共享版本库 ...

  4. Git学习笔记---安装与初始化 连接远程版本库

    1.Git的安装 sudo apt-get install git 用的是linux(ubuntu)系统,安装非常简单,上面一条命令就够了. 2.初次运行的配置 Git 提供了一个叫做 git con ...

  5. Git的使用(3) —— 远程版本库的操作(GitHub)

    1. 配置SSH (1) GitHub 登陆GitHub后,点击右上角头像,选择 Setting . 在左面栏目中选择"SSH and GPG keys". 打开生成的SSH公钥文 ...

  6. GitHub学习三-远程版本库更新与提交

    1.远程版本库更新 一般来说,将本地与远程相关联之后,首先将数据从远程更新下来再上传比较好. 输入 git pull origin master 如果新建版本库的话勾选了初始化包含readme.md, ...

  7. git 远程版本库,github提供服务原理,git自动更新发送邮件

    1.安装好Linux,安装好Git(192.168.1.239) 2.创建一个用户zph(让此用户提供git on server),密码设置为12345678 # useradd zph # pass ...

  8. 关于git远程版本库的一些问题之解决

    Part1:CentOS6.5免密码登录 修改/etc/ssh/sshd_config RSAAuthentication yesPubkeyAuthentication yesAuthorizedK ...

  9. git 远程版本库

    [root@localhost workspace]# cd repos/ [root@localhost repos]# ll 总用量 drwxr-xr-x root root 12月 : hell ...

随机推荐

  1. boost::archive::text_oarchive

    Serialization的中文解释是“串行化” .“序列化”或者“持久化” ,就是将内存中的对象保存到磁盘中,等到程序再次运行的时候再读取磁盘中的文件恢复原来的对象.下面来看一个简单的例子: #in ...

  2. springMVC问题

    网站中springmvc.xml配置: <bean id="viewResolver" class="org.springframework.web.servlet ...

  3. Vue基础-渲染函数-父子组件-传递数据

    Vue 测试版本:Vue.js v2.5.13 做了个 demo,把父子组件的数据都绑定到 Vue 实例 app 上,注释中的 template 相对好理解些 <div id="app ...

  4. js 函数递归优化,arguments.callee 优化

    函数递归是个经典的问题,平常用的时候,小练习可以通过函数名来反复调用,比如: function factorial(num) { if (num <= 1) { return 1; } else ...

  5. HDFS 常用Shell命令

    HDFS Shell命令 概述 HDFS Shell命令允许使用命令行在HDFS存储中进行文件夹和文件操作. 如文件夹的增删改查.文件的增删改查等. 开始练习hadoop时,打开Linux之后要用 s ...

  6. Tortoise SVN 使用

    1.添加文件或文件夹 2.删除文件或文件夹 ①If you want to delete an item from the repository, but keep it locally as an ...

  7. 解决kindeidtor与struts2框架交互WARN OgnlValueStack:68 - Error setting value [[Ljava.lang.String;@10da4df]的bug

    当用使用ssh框架,前端用到kindeitor富文本编辑器时候,上传文件后有一个图片管理.当点击图片管理的时候,在后台会报一个异常: WARN OgnlValueStack:68 - Error se ...

  8. js Ajax 跨域请求

    一.使用jsonp的方式(只支持get请求) 二.使用cors的方式(支持HTTP的大部分请求方式) 三.apache的转发(修改服务器配置) 没有试验,暂时不详细写!

  9. LeetCode_Compare Version Numbers

    题目: Compare two version numbers version1 and version2. If version1 > version2 return 1, if versio ...

  10. python学习笔记(二十五)重写父类方法

    python继承中,如果子类在调用某个方法时,它首先是从派生类(也就是当前类)中去找对应的方法,如果当前类中找不到对应的方法,就会去基类(派生类)中去逐个查找. 若父类的方法不能满足子类的需要,那么子 ...