赞
踩
目录
简单介绍在linux系统中创建一个多人协同作业用的git repository的步骤及一些相关设置。这里仅考虑在同一linux服务器内的用户要访问该git-repo,暂不涉及从外部网络访问该git-repo的设置。
首先,假定你有管理员权限,并且假定先创建了一个组grp_git,允许该组中的成员访问该共享git repository。
以下操作假定以root权限操作(当然也可以用户权限创建)。
>> cd /path/to/where-you-want-to-put-the-git-repo
>> git init --bare myrepo.git
使用 --bare 参数初始化的仓库,我们一般称之为裸仓库, 因为这样创建的仓库并不包含 工作区 , 也就是说,我们并不能在这个目录下执行我们一般使用的 Git 命令。
这个命令执行后,将在本地创建一个名为 repo 的文件夹, 里面包含着 Git 的基本目录, 我们一般会将这个文件夹命名为后面加 .git 的形式,如 repo.git (这也是为什么我们从 GitHub clone 仓库的时候,地址都是 xxx.git 这样的形式的原因)。
以上创建好了后,用户便可以使用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
解决方案如下章所示。
[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仓库可以作为多人协同作业用的共享仓库正式投入使用了。
[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时的报错又有所不同,如下所示:
但是,仍然是用如上所述的命令可以解决。
如果你创建了一个多人共同作业的公共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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。