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

    xiaoxiao2021-03-25  99

    git init 和 git 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
    转载请注明原文地址: https://ju.6miu.com/read-16472.html

    最新回复(0)