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都可以用来更新本地库,它们之间有什么区别呢 ...
随机推荐
- Token_使用JWT生成token
1.token三部分 header { "typ": "JWT", "alg": "HS256" } paylo ...
- HDU 1251 统计难题 (Trie)
pid=1251">统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/ ...
- mysql.sock文件的作用
mysql.sock应该mysql的主机和客户机在同一host上的时候,使用unix domain socket做为通讯协议的载体,它比tcp快.Mysql有两种连接方式: (1)TCP/IP (2 ...
- vsftpd 本地用户无法登陆 530 Login incorrect
查看日志,监测用户无法登陆的错误日志 tail -f /var/log/secure 查看vsFTPd配置 /etc/vsftpd/vsftpd.conf 通过查看日志,发现用户的密码已经过期了... ...
- Python 面向对象编程基础
Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...
- angular.copy() 取消angular的数据双向绑定
网址:https://www.tslang.cn/docs/tutorial.html
- How vacuum template0
[pg@h1 ~]$ vacuumdb --freeze template0 vacuumdb: could not connect to database template0: FATAL: dat ...
- Cookie技术
u 常用的API 创建Cookie对象 Cookie(String name, String value) ->以指定数据创建Cookie对象 设置Cookie对象 void setMa ...
- C++模板类内友元(友元函数,友元类)声明的三种情况
根据<C++ Primer>第三版16.4节的叙述,C++类模板友元分为以下几种情况 1.非模板友元类或友元函数. 书上给了一个例子: class Foo{ void bar(); ...
- 邁向 RHCE 之路 (Day26) - Apache 網頁伺服器
本篇將在 SELinux 安全機制及 IPTables 防火牆開啟的環境下實作,分別實作簡單網頁服務及虛擬主機 Virtual Host 設定,最後則是實作網頁中需要保護網頁時可以透過 .htacce ...