zoukankan      html  css  js  c++  java
  • git init 与 git init --bare 区别

    git init 与 git init --bare 区别

    发现问题
    最早是在公司的wiki上发现了这个命令,google后发现值得记录下来

    实践中发现的区别

    网上找了很多资料,但说的很乱,干脆在自己的服务器上执行对比了一下:
    
    git init demo1  # 表示创建一个叫demo1的私人仓库
    # git init目录下只有一个.git隐藏文件夹,里面包含各种信息
    git init --bare deme2  # 表示创建一个裸库,主要应用场景是作为公共仓库
    # 裸库的目录下没有隐藏.git目录,全都是显示的,没有.git这个目录,进入文件直接是文件内容
    # 一般来讲,作为远端备份或公共版本库时,应该使用git init --bare。
    

    图片来自阮一峰网站
    Workspace:工作区
    Index / Stage:暂存区
    Repository:仓库区(或本地仓库)
    Remote:远程仓库

    详细说一下使用 --bare 参数的含义,使用 --bare 参数初始化的仓库,我们一般称之为裸仓库, 因为这样创建的仓库并不包含 工作区 , 也就是说,我们并不能在这个目录下执行我们一般使用的 Git 命令。

    原因分析

    参考链接

    用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。

    比如有用户在该目录(就称为远端仓库)下执行git操作,且有两个分支(master 和 b1),当前在master分支下。另一个用户想把自己在本地仓库(就称为本地仓库)的master分支的更新提交到远端仓库的master分支
    他就想当然的敲了命令git push origin master:master自然就会发生冲突

    因为远端仓库的用户正在master的分支上操作,而你又要把更新提交到这个master分支上,当然就出错了。
    但如果是往远端仓库中空闲的分支上提交还是可以的,比如git push origin master:b1 还是可以成功的

    解决办法就是使用”git init –bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”)

    这个就是最好把远端仓库初始化成bare仓库的原因。

    这个文章写得很详细

    一些实际中用到的操作

    在远程段10.10.0.10

    添加用户

    useradd -s /usr/bin/git-shell chen  # 指定git-shell
    usermod -g git chen  # 修改用户组
    passwd chen  # 修改密码
    

    添加项目

    cd /git  # 进入git的根目录
    git init --bare ngx_luacode.git  # 创建git公共仓库(目录)
    chown git.git ngx_luacode.git/ -R  # 修改属主属组
    chmod 775 ngx_luacode.git/ -R  # 修改权限
    

    git 项目添加

    cd ngx_luacode.git  # 进入目录
    修改config
    [core]
            repositoryformatversion = 0
            filemode = false
            bare = true
            sharedrepository = 1
    [receive]
            denyNonFastforwards = true
    
    • 当涉及两种系统的时候,会出现权限问题,即windows访问,导致linux文件权限修改,git会识别权限,认为文件被修改了,所以建议修改config中的参数filemode = false
    • 当执行了git reset命令,版本回退后没有恢复,造成本地仓库的提交版本号落后于远端仓库的提交版本号。可以执行 git push -f命令去强制提交,为了防止这种操作,在配置文件中设置denyNonFastforwards = true
    10.10.0.14(在本地仓库)

    拉取

    git clone 用户名@git.master.com:/git/xxxx.git
    vim .git/config
    filemode = false
    
  • 相关阅读:
    Vue快速学习_第四节
    Vue快速学习_第三节
    Vue快速学习_第二节
    从N个元素的集合中随机取m个元素的算法实现
    Mysql加锁过程详解
    TFS 测试用例导入、导出工具
    TFS实现需求工作项自动级联保存
    Gulp自动构建Web前端程序
    Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理
    Python sphinx-build在Windows系统中生成Html文档
  • 原文地址:https://www.cnblogs.com/irockcode/p/8761954.html
Copyright © 2011-2022 走看看