我需要创建一个中央Git存储库,但我有点困惑…
我已经创建了一个裸库(在我的git服务器,机器2):
$ mkdir test_repo
$ git --bare init
现在我需要将文件从本地存储库(机器1)推送到裸存储库(机器2)。我可以通过SSH访问机器2。问题是我认为我不理解裸库的概念……
在裸库中存储代码的正确方法是什么?如何将更改从本地存储库推送到裸存储库?
拥有一个中央存储库的正确方式是拥有一个裸存储库吗?
这个题目我有点搞不懂。请给我一个提示。
我需要创建一个中央Git存储库,但我有点困惑…
我已经创建了一个裸库(在我的git服务器,机器2):
$ mkdir test_repo
$ git --bare init
现在我需要将文件从本地存储库(机器1)推送到裸存储库(机器2)。我可以通过SSH访问机器2。问题是我认为我不理解裸库的概念……
在裸库中存储代码的正确方法是什么?如何将更改从本地存储库推送到裸存储库?
拥有一个中央存储库的正确方式是拥有一个裸存储库吗?
这个题目我有点搞不懂。请给我一个提示。
当前回答
你也可以让git为你创建目录:
git init --bare test_repo.git
其他回答
首先,为了检查,你需要在运行git init——bare之前切换到你创建的目录。此外,通常为裸存储库提供.git扩展名。所以你可以
git init --bare test_repo.git
对于< 1.8的Git版本,您可以这样做
mkdir test_repo.git
cd test_repo.git
git --bare init
为了回答你后面的问题,裸库(根据定义)没有附加到它们的工作树,所以你不能像在正常的非裸库中那样轻松地向它们添加文件(例如git add <file>和后续的git提交)。
您几乎总是通过从另一个存储库推送(使用git push)来更新一个裸存储库。
注意,在这种情况下,您需要首先允许人们推送到您的存储库。在test_repo中。git,做
git config receive.denyCurrentBranch ignore
社区编辑
git init --bare --shared=group
正如prasanthv所评论的,如果你是在工作中这样做,而不是在私人住宅项目中,这就是你想要的。
这就足够了:
git remote add origin <url-of-bare-repo>
git push --all origin
请参阅“GIT:如何更新我的裸回购?” 注:
对于裸回购远程引用,可以使用与'origin'不同的名称。 这不会推送你的标签,你需要一个单独的git推送——tags origin。
你也可以让git为你创建目录:
git init --bare test_repo.git
一一回答你的问题:
裸存储库是指没有工作树的存储库。这意味着它的全部内容都在。git目录中。
您只能通过从本地克隆推送到裸存储库来提交。它没有工作树,所以没有文件被修改,没有变化。
要有中央存储库,唯一的方法是有一个裸存储库。
根据Mark Longair和Roboprog的回答:
如果git版本>= 1.8
git init --bare --shared=group .git
git config receive.denyCurrentBranch ignore
Or :
如果git版本< 1.8
mkdir .git
cd .git
git init --bare --shared=group
git config receive.denyCurrentBranch ignore