git init 和 git init –bare 的区别和解决www下没有源文件无法看的的问题

阅读: 评论:0

git init  和 git init –bare 的区别和解决www下没有源文件无法看的的问题

git init 和 git init –bare 的区别和解决www下没有源文件无法看的的问题

git initgit init –bare 的区别
搞过网站开发的人,有时候会遇到这样的问题,在开发网站的时候,在服务器的web或者www目录下创建个仓库,每次开发都推上去,直接部署了,可以直接访问,但是在创建仓库的时候,弄不好,就出现web目录下没有HTML,js,php文件就与git init命令有关


使用命令"git init --bare"git --bare init 一个意思,(bare汉语意思是:裸,裸的)

初始化的版本库(暂且称为bare repository)只会生成一类文件:就是在本地目录下可以看到的.git目录下的文件,用于记录版本库历史记录的.git目录下面的文件;
而不会包含实际项目源文件的拷贝;所以该版本库不能称为工作目录(working tree);
如果你进入版本目录,就会发现只有.git目录下的文件,而没有其它文件;
当我们访问网站的时候就无法访问了,因为就没有HTML文件嘛。
就是说,这个版本库里面的文件都是.git目录下面的文件,把原本在.git目录里面的文件放在版本库的根目录下面;

[root@slh githome]# git init --bare
Initialized empty Git repository in /home/echo/githome/
[root@slh githome]# ll
total 32
drwxr-xr-x. 2 root root 4096 2010-01-05 13:46 branches
-rw-r--r--. 1 root root   66 2010-01-05 13:46 config
-rw-r--r--. 1 root root   58 2010-01-05 13:46 description
-rw-r--r--. 1 root root   23 2010-01-05 13:46 HEAD
drwxr-xr-x. 2 root root 4096 2010-01-05 13:46 hooks
drwxr-xr-x. 2 root root 4096 2010-01-05 13:46 info
drwxr-xr-x. 4 root root 4096 2010-01-05 13:46 objects
drwxr-xr-x. 4 root root 4096 2010-01-05 13:46 refs

这些文件的意思

|-- HEAD         # 这个git项目当前处在哪个分支里
|-- config       # 项目的配置信息,git config命令会改动它
|-- description  # 项目的描述信息
|-- hooks/       # 系统默认钩子脚本目录
|-- index        # 索引文件
|-- logs/        # 各个refs的历史信息
|-- objects/     # Git本地仓库的所有对象 (commits, trees, blobs, tags)
`-- refs/        # 标识你项目里的每个分支指向了哪个提交(commit)。

换句话说,不使用–bare选项时,就会生成.git目录以及其下的版本历史记录文件,这些版本历史记录文件就存放在.git目录下;而使用–bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面


感觉写的好绕啊,就一个意思:
git --bare init只有历史版本库文件,裸(bare)仓库里只存储历史和元信息,不会维护工作目录。

git init 有项目源文件,还有历史版本库文件,历史版本库文件放在.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仓库的原因。

当你在开发的web网站时,用git init吧
但是还有问题:
当本地仓库向远程仓库push时,如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上,也即在远程仓库的目录下对应的文件还是之前的内容。
解决方法:服务器端必须运行命令:git reset –hard才能看到push后的内容。
这样好麻烦的

可能会遇到这个问题
Git: push 出错的解决 master -> master (branch is currently checked out)
这是由于git默认拒绝了push操作,需要进行设置,修改服务器端的.git/config添加如下代码:


[receive]
denyCurrentBranch = ignore

本文发布于:2024-02-03 01:01:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170689329447631.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:FTP
标签:源文件   区别   init   git   www
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23