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
git init 与 git init --bare 区别的更多相关文章
- git init和git init -bare区别
1 Git init 和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...
- git init 与 git init --bare 的区别
git init 和 git init –bare 的区别 使用命令"git init --bare"(bare汉语意思是:裸,裸的)初始化的版本库(暂且称为bare repos ...
- git init和git init –bare的区别:
感谢原文作者:ljchlx 原文链接:https://blog.csdn.net/ljchlx/article/details/21805231 git init 和 git init –bare 的 ...
- npm遇到的问题--npm install 执行报错 /bin/git submodule update -q --init --recursive
1.执行npm i 安装依赖时,报错:cannot read property 'match' of undefined 据说是npm本地缓存导致 解决方案: rm -rf package-lock. ...
- 【原理、命令】Git基本原理、与Svn的区别、命令
一.Git是什么? Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程:Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote ...
- git database 数据库 平面文件 Git 同其他系统的重要区别 Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异 Git 的设计哲学
小结: 1.如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来 2.注意 git clone 应指定版本,它复制的这个版本的全部历史信息: 各个分支 git init 数据库 ...
- git clone、git pull和git fetch的用法及区别
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流.Git 常用命令速查表 最近在一个学习小组里学习AI的课程,我们所有的学习资料和homework都放在gitlab上.今天一个小队友从gitlab ...
- Git简介以及与SVN的区别
Git是由著名Linux内核(Kernel)开发者LinusTorvalds为了便利维护Linux而开发的. Git是一个分布式的版本控制系统.作为一个分布式的版本控制系统,在Git中并不存在主库这样 ...
- git fetch和git pull之间的区别--转载
原文地址:http://blog.csdn.net/a19881029/article/details/42245955 git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢 ...
随机推荐
- [Angular-Scaled web] 5. ui-router $stateParams for sharing information
When using ui-route, we want to pass the information with the url. Example: angular.module('categori ...
- PHP如何安装和配置Zend Studio
1 网上下载该软件,安装之后关闭三个东西 2 新建一个本地的PHP项目 3 展开左侧的资源树,发现多了一个PHP的相关东西 4 右击"基础知识",新建一个PHP文件并输入以下代码 ...
- UNIX网络编程读书笔记:原始套接口
概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket).http://www.cnblogs.com/nufangrensheng/p/3583435.ht ...
- 数据库case,when学习
前几天工作中遇到了一个数据库统计相关的东西,主要使用case,when实现.如今说说基本情况: 有两个表school,studens,当中 school表结构例如以下: students表结构例如以下 ...
- 算法笔记_044:表达式计算求值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的 ...
- JUnit单元测试基础要点
JUnit单元测试基础要点 1.JUnit是一种测试代码的框架,测试的目的是:保证代码没错,而不是保证代码正确. 2.测试类一般不要和目标类放在一起,但编译成的class文件是放在一起的. 3.单元测 ...
- 利用JqGrid结合ashx显示列表之一
最近项目决定运用JqGrid列表控件显示相关数据,以前接触比较多还是easyui和Ext.Net的列表控件,文章简单写的小实例进行一个总结: 1:引入相关的JS及CSS文件,JqGrid目前可以利用J ...
- taro 打包微信小程序运行失败(一)
1.报错信息 thirdScriptError sdk uncaught third Error Cannot read property 'createTextNode' of undefined ...
- Hadoop集群+Spark集群搭建(一篇文章就够了)
本文档环境基于ubuntu16.04版本,(转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢) 一.准备 1.1 软件版本 Ub ...
- ref与out区别(ref有进有出,而out只出不进)
ref与out区别(ref有进有出,而out只出不进) C#基础:ref和out的区别 ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值 ...