当前位置:   article > 正文

git: Linux中创建中心仓库(or 裸仓库:bare repository)_git bare

git bare

目录

1. 前言

2. 创建步骤

step1: cd到你要放置该git-repo的地方

step2: 创建git repository

3. git clone

4. 设置权限

5. 第一次提交

6. 变更git repo名


1. 前言

        简单介绍在linux系统中创建一个多人协同作业用的git repository的步骤及一些相关设置。这里仅考虑在同一linux服务器内的用户要访问该git-repo,暂不涉及从外部网络访问该git-repo的设置。

        首先,假定你有管理员权限,并且假定先创建了一个组grp_git,允许该组中的成员访问该共享git repository。

        以下操作假定以root权限操作(当然也可以用户权限创建)。

2. 创建步骤

step1: cd到你要放置该git-repo的地方

>> cd /path/to/where-you-want-to-put-the-git-repo        

step2: 创建git repository

>> git init --bare  myrepo.git

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

        这个命令执行后,将在本地创建一个名为 repo 的文件夹, 里面包含着 Git 的基本目录, 我们一般会将这个文件夹命名为后面加 .git 的形式,如 repo.git (这也是为什么我们从 GitHub clone 仓库的时候,地址都是 xxx.git 这样的形式的原因)。

3. git clone

        以上创建好了后,用户便可以使用git clone命令将该仓库clone到本地作业目录了。如下所示:

>> git clone /path/to/myrepo.git

        但是,用户应该还不能进行push。常见的git push error如下所示:

error: insufficient permission for adding an object to repository database ./objects
fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit

        解决方案如下章所示。

4. 设置权限

        [2024-01-04修订,以下命令假定是以管理员权限执行] :

>> cd path-to-hold-myrepo.git

>> chgrp -R grp_git myrepo.git

>> chmod -R 770 myrepo.git

>> cd myrepo.git

>> chmod -R g+rws objects        

        注1:要给myrepo.git设置正确group名,否则的话组员没有访问该仓库目录的权限。仅仅把objects组名设置为grp_git还不够

        注2:需要先将整个仓库目录的权限设置为组员全访问权限,然后再单独设定objects访问权限

        注3:chgrp命令将访问权限赋给grp_git组内成员。

        注4:The “s” option in the “g+rws” is to set the setuid bit on the objects folder. This will make sure any new directory created under objects folder will make the group name from the objects folder which is owned by git group. 不建议使用“chmod -R 777 objects”。

        除了以上设置外,还需要将该git-repo设置为共享仓库(shared repository),如下所示(2024-01-17: 以下两条命令应该是在murepo.git目录中执行):

>> git config core.sharedRepository group

        注意,以上命令中,“group”就是参数名,不是表示组名,即(在本例中)不需要改成grp_git!

        执行以上命令后可以通过执行git config命令查看git仓库的信息:

$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=true
core.sharedrepository=group

        好了,到这里就大功告成,该git仓库可以作为多人协同作业用的共享仓库正式投入使用了。

5. 第一次提交

[2023-05-28]

        将以上创建好的空仓库git clone下来后,添加初始的文件数据,然后git add --> git commit --> git push...但是,在git push后报告错误(不懂,但是记录在此,以为后来者参考):

        不过,老老实实地遵照提示执行命令就可以了,如下所示:

        貌似,因为是第一次提交,所以要建立本地待提交的东西与远程的branch的上下游链接关系?这里相当于是说将提交的东西挂在origin master branch底下,而不是别的branch。这是因为git repo中可能有多个branch。。。 

[2023-11-04]

这次第一次push时的报错又有所不同,如下所示:

但是,仍然是用如上所述的命令可以解决。

6. 变更git repo名

        如果你创建了一个多人共同作业的公共git repo,但是过了一段时间后你发现这名字取得不合适,可以改掉它吗?当然,你可以野蛮粗暴地重建一个,把原git-repo最后的内容搬移过来作为新的git-repo的初始提交。这样做的坏处是原git-repo中记录的版本历史信息等可能丢失了。

        这里介绍直接in-place地修改git-repo名的方法。

        step1: 直接将公共git库目录名由old-repo-name.git改为new-repo-name.git

        step2: 各作业者在各自本地repo目录底下

cd local-repo-folder
git remote -v (it will show previous git url)
git remote set-url origin /path-to-old-git-repo/new-repo-name.git
git remote -v (double check, it will show new git url)
git push (do whatever you want.)

        OK, that's all!

关于git使用入门的一些常见知识,参见:git : 从入门到实战进阶

参考:

How to Fix Git Push Insufficient Permission Error for Objects Permanently 

Git - Change git repository name (devtut.github.io)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号