如何设置自己的 GIT 服务器?什么是裸/非裸存储库?

如何设置自己的 GIT 服务器?什么是裸/非裸存储库?

我正在尝试设置一个简单的 GIT 服务器。我在一台虚拟 PC(Virtual Box)上安装了 Ubuntu。我安装了 GIT,创建了一个 repo 等

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

然后在 Windows 上,我做了类似下面的事情(在 cygwin 上)

git clone [email protected]:proj1

然后尝试做出改变

git commit -am“...”

但得到了类似

查看图片

我想可能是我设置 GIT 错了?我读到它与 bare/non-bare repos 有关?我应该一直使用 bare 吗?我试过了

git checkout --bare [email protected]:proj1 

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

另外,有人可以解释一下裸/非裸存储库吗?我有点迷茫,GitHub 上没有这样的东西!

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

我尝试过http://www.youtube.com/watch?v=1gNFrPNF9-Y在 Ubuntu(服务器)上

git init --bare

然后在 Windows (客户端/Cygwin) 上执行

git init 
// added readme.txt 
git add .
git commit -m "..."
git remote add origin master [email protected]:proj2
git push origin master

没有错误似乎没问题。但在 Ubuntu 上,我看不到我的文件在哪里?我查看了branches/1,那里有第 n 个文件?

答案1

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

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

您无法在裸存储库上工作。您必须先将裸存储库克隆到普通存储库,然后再在克隆存储库上工作。

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

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

当你想从 Windows 机器和 Ubuntu 机器上处理你的项目时,你有两个选择:

  1. 创建一个裸存储库(无论在哪里)。然后从该存储库克隆,一个在 Windows 机器上,一个在 Ubuntu 机器上。现在从克隆推送到裸存储库,并从裸存储库拉取到克隆。不要推送到普通存储库。

  2. 创建两个普通存储库,一个在 Windows 机器上,一个在 Ubuntu 机器上。现在,在 Ubuntu 上工作时,您可以从 Windows 机器拉取,反之亦然。不要互相推送。

底线:只推送到裸存储库。在所有其他情况下,当您认为要从 A 推送到 B 时,请先转到 B,然后从 A 拉取。

看来你对 git 还很陌生。请阅读以下一本或两本非常好的书:Git 书籍专业 Git

答案2

相关内容