如何设置自己的GIT服务器?什么是裸/非裸回购?


10

我正在尝试设置一个简单的GIT服务器。我在虚拟PC(虚拟盒子)上安装了Ubuntu。我安装了GIT,创建了一个仓库

git init 
git add .
git commit "..."

然后在Windows上,我做了以下操作(在cygwin上)

git clone jiewmeng@192.168.0.3:proj1

然后尝试进行更改

git commit -am“ ...”

但是有类似的东西

看图片

我想我设置的GIT错误吗?我读到与裸/非裸回购有关的东西吗?我应该一直光着头吗?我试过了

git checkout --bare jiewmeng@192.168.0.3:proj1 

但进入proj1.git其中后,里面出现了奇怪的文件/文件夹,例如(HEAD等)。设置GIT的正确方法是什么?

也可以有人解释裸/非裸仓库,我有点迷失了,有了GitHub,没有这样的事情!

更新时间:2011年4月28日下午6点UTC + 8

我尝试遵循http://www.youtube.com/watch?v=1gNFrPNF9-Y并在Ubuntu(Server)上做了

git init --bare

然后在Windows(Client / Cygwin)上

git init 
// added readme.txt 
git add .
git commit -m "..."
git remote add origin master jiewmeng@192.168.0.3:proj2
git push origin master

没有错误似乎还可以。但是在Ubuntu上,我看不到文件在哪里?我branches/在那儿找了1个nth?

Answers:


9

“普通”存储库是一个包含实际存储库和工作副本的目录。实际的存储库位于名称为的隐藏子目录中.git。工作副本是您使用的那些文件和目录。

“裸”存储库只是.git目录的内容,没有工作副本。

您不能在裸仓库上工作。您首先必须将裸存储库克隆到普通存储库,然后再进行克隆。

在您的第一次尝试中,您创建了一个“普通”存储库。然后,您将其克隆。然后,您尝试将其推回普通存储库。然后,您得到了警告。您不应推送到普通存储库。当您尝试这样做时,Git会警告您。您应该只推送到裸仓库。

在第二次尝试中,您创建了一个“裸”存储库。然后,您创建了一个“普通”存储库。然后,您从普通存储库推送到裸存储库。那是预期的工作流程之一。这就是为什么您没有错误或警告的原因。

如果要从Windows机器和ubuntu机器上处理项目,则有两个选择:

  1. 创建一个裸存储库(无论在哪里)。然后从该存储库克隆,一个在Windows计算机上,另一个在ubuntu计算机上。现在将其从克隆推送到裸存储库,然后将其从裸存储库拉入克隆。不要推送到普通存储库。

  2. 创建两个普通存储库,一个在Windows计算机上,一个在ubuntu计算机上。现在,在使用ubuntu时,您可以从Windows计算机上拉取,反之亦然。不要互相推挤。

底线:只能推送到裸仓库。在所有其他情况下,如果您想从A推到B,则转到B然后从A拉出。

看来您是git的新手。请阅读以下两本非常出色的书中的一本或两本:Git书Pro Git


1
嗯,似乎主要的学习重点是“ 仅推送到裸仓库。在所有其他情况下,当您认为要从A推送到B时,转到B然后从A推送 ”。如果是这样,GitHub如何做到?我将其推向正确位置(nv已将其用于awile ...)?
孟梦

@JiewMeng:GitHub使用裸仓库。该网站直接从Git读取数据,不需要工作目录。
user1686

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.