GIT使用—创建并使用远程版本库

远程版本库

(1)创建一个裸版本库

[[email protected] tmp]# git init fluff2
Initialized empty Git repository in /tmp/fluff2/.git/
[[email protected] tmp]# ls
fluff2
[[email protected] tmp]# git init --bare fluff
Initialized empty Git repository in /tmp/fluff/
[[email protected] tmp]# ls
fluff  fluff2

(2)远程版本库

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

常见命令:

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

分支类别:

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

示例:

创建权威版本库public_html.git

用一个初始版本库填充Depot

[[email protected] tmp]# cd Depot/
[[email protected] Depot]# git clone --bare /root/public_html public_html.git
Initialized empty Git repository in /tmp/Depot/public_html.git/
[[email protected] Depot]# ls
public_html.git

[[email protected] Depot]# cd /root/public_html/
[[email protected] public_html]# ls   #有工作目录
foo.html  index.html  yes.html
[[email protected] public_html]# ls -aF
./  ../  foo.html  .git/  index.html  yes.html
[[email protected] 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/
[[email protected] public_html]# cd /tmp/Depot/
[[email protected] Depot]# ls -aF public_html.git/   #没有工作目录
./  ../  branches/  config  description  HEAD  hooks/  info/  objects/  packed-refs  refs/

[[email protected] Depot]# cd public_html.git/
[[email protected] public_html.git]# cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = true

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

制作自己的origin远程版本库

[[email protected] public_html.git]# cd /root/public_html/
[[email protected] public_html]# cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[[email protected] public_html]# git remote add origin /tmp/Depot/public_html
[[email protected] 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远程版本库进程

[[email protected] public_html]# git branch -a
* master
  newtest
  testing
[[email protected] 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
[[email protected] public_html]# git branch -a
* master
  newtest
  testing
  remotes/origin/master  #远程追踪分支:掌握和跟踪远程版本苦苦master分支中的提交
  remotes/origin/newtest
  remotes/origin/testing

在版本库中进行开发

[[email protected] 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
[[email protected] public_html]# vim fuzzy.txt
[[email protected] public_html]# cat fuzzy.txt
Fuzzy Wuzzy was a bear
Fuzzy Wuzzy had no hair
Fuzzy Wuzzy wasn‘t very fuzzy,
Was he?
[[email protected] public_html]# git add fuzzy.txt
[[email protected] public_html]# git commit -m "add fuzzy"
[master 5571b42] add fuzzy
 1 files changed, 4 insertions(+), 0 deletions(-)
 create mode 100644 fuzzy.txt
[[email protected] 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

推送变更

[[email protected] 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的远程版本库中。

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

在本地
[[email protected] public_html]# cd /tmp/Depot/public_html.git/
[[email protected] 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

在不同物理机
[[email protected] public_html.git]# git ls-remote origin
然后用git rev-parse HEAD或git show ID来展示那些与当前本地分支匹配的提交ID

添加新的开发人员

[[email protected] tmp]# mkdir bobo
[[email protected] tmp]# ls
bobo  Depot  fluff  fluff2
[[email protected] tmp]# cd bobo/
[[email protected] bobo]# ls
[[email protected] bobo]# git clone /tmp/Depot/public_html.git
Initialized empty Git repository in /tmp/bobo/public_html/.git/
[[email protected] bobo]# ls
public_html
[[email protected] bobo]# cd public_html/
[[email protected] public_html]# ls   #这里因为这前建立origin时原版本库在newtest分支上
foo.html  index.html  yes.html
[[email protected] public_html]# git branch
* newtest
[[email protected] public_html]# ls -aF
./  ../  foo.html  .git/  index.html  yes.html
[[email protected] public_html]# cd .git/
[[email protected] .git]# ls
branches  config  description  HEAD  hooks  index  info  logs  objects  packed-refs  refs
[[email protected] .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
[[email protected] .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)

[[email protected] public_html]# git branch -a
* newtest
  remotes/origin/HEAD -> origin/newtest  #远程版本库认为的活动分支
  remotes/origin/master
  remotes/origin/newtest
  remotes/origin/testing

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

[[email protected] public_html]# cat yes.html
AAAAAA
[[email protected] public_html]# vim yes.html
[[email protected] public_html]# cat yes.html
BBBBBBB

[[email protected] 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
[[email protected] public_html]# git commit yes.html
[newtest c24a693] change yes.html
 1 files changed, 1 insertions(+), 1 deletions(-)

[[email protected] 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

获取版本库更新

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

[[email protected] public_html]# git pull

pull意味着先执行fetch,然后执行merge或rebase。

push和fetch都负责在版本库之间传输数据,但方向相反。

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

最初的开发

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

交替的历史记录

获取交替记录

合并历史记录

推送合并后的历史记录

原文地址:https://www.cnblogs.com/tongxiaoda/p/8482423.html

时间: 2024-11-09 00:50:04

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

git在本地创建工作空间并从远程版本库获取代码

1.创建一个新的文件夹:[[email protected] http]# mkdir activityTestLee 2.进入该文件夹[[email protected] http]# cd activityTestLee 3.创建本地版本库:[[email protected] activityTestLee]# git initInitialized empty Git repository in /http/activityTestLee/.git/ 4.获取钩子:[[email pro

Git从创建到推送到远程版本库

1.创建一个新的文件夹,并进入到该文件夹里,使用命令:git init来创建新的git仓库: 2.获取钩子(每次git init之后都要一次): [[email protected] activity.mycihi.cn]# scp -p -P 8849 [email protected]:hooks/commit-msg .git/hooks/Enter passphrase for key '/root/.ssh/id_rsa':commit-msg 100% 4365 4.3KB/s 00

关于Git远程版本库

Git作为分布式版本库控制系统,每个人都是本地版本库的主人,可以在本地的版本库中随心所欲的创建分支和里程碑. 当需要多人协作时,问题就出现了: 1.如何避免因为用户把所有的本地分支都推送到了共享版本库,从而造成共享版本库上分支混乱. 2.如何避免不同用户针对不同特性开发创建了相同名字的分支而造成分支名称上的冲突;. 3.如果不带参数执行git fetch,git pull和git push 到底是和那个远程版以及哪个分支进行交互? 之前说Git 分支的时候,每一个版本库最多只和一个远程共享上游版

如何解决更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外 提示:一个版本库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更 提示:(如 'git pull ...')。

不要通过网页提交,通过网页提交一次,然后在终端再次push的时候,会认为网上代码仓库已经被其他地方提交过一次代码,此时会拒绝终端push 这个时候只能是pull,然后才能再次在终端提交. 也就是说,避免这种问题的注意事项是:不要通过网页向仓库提交文件. 解决办法: 1.强行上传  git push -u origin +master 2. 尽量先同步github上的代码到本地,在上面更改之后再上传 如何解决更新被拒绝,因为远程版本库包含您本地尚不存在的提交.这通常是因为另外 提示:一个版本库已向

使用GIT BASH管理多个远程代码库

使用GIT BASH管理多个远程代码库技术 maybe yes 发表于2015-01-15 13:11 原文链接 : http://blog.lmlphp.com/archives/62  来自 : LMLPHP后院 我的另一篇文章<GITHUB之GIT BASH使用教程>, 最近一段时间,百度等搜索引擎也带来了一些流量,看到有很多网友浏览,也有网友来过多次.这篇文章再做一些补充,关于如何使用 GIT 推送代码到多个远程代码库.使用场景:比如我们的项目同时放到了 GITHUB 和 GITOSC

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

Part1:CentOS6.5免密码登录 修改/etc/ssh/sshd_config RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile /root/.ssh/authorized_keys 启用这三行,然后重启service sshd restart设置.ssh目录权限chmod 700 -R .ssh如果你想要每台机子都无密码登录,那么把每台机子产生的密钥添加到文件中(这是在受控端机子上面执行的)cat id_rs

Git学习笔记(一) 安装及版本库介绍

安装Git 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Windows这几大平台上正常运行了. 在Linux上安装Git 首先,你可以试着输入 git ,看看系统有没有安装Git: $ git The program 'git' is currently not installed. You can install it by typing: sudo

【原创】Git删除暂存区或版本库中的文件

0 基础 我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的其他有关Git的文章[链接]. (1)打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit). (2)首次新建的文件都是untracked状态(未跟踪),此时需要git add

git config配置,工作区和版本库联系。

关于git和github的介绍,我这边不多说. 使用在windows下使用git,需要配置环境变量,也可以使用git自带的终端工具.,打开git bash [email protected] MINGW64 ~ (master) $ cd c:/laoni [email protected]-TPPLHIB MINGW64 /c/laoni $ dir AutomatedMonitor bak Mr.blue PycharmProjects [email protected]-TPPLHIB M