如何创建本地git仓库并使用SourceTree进行管理?

4

虽然我之前使用过Perforce和SVN,但我是Git的新手。我想要对Unity项目进行源代码控制,但我不想将其托管在任何在线服务器上。

我一个人开发这个项目,但我通常在不同位置使用两台不同的电脑。过去,我曾经在USB驱动器中拥有一个SVN仓库,并使用每台计算机本地版本的更新/提交操作。

由于我以前从未使用过Git,并且我想学习,因此我正在尝试做同样的事情(我知道你不应该以这种方式使用Git,但我绝对不想将我的项目托管在任何在线服务器上)。

阅读了很多关于Git的资料后,我认为我已经基本掌握了它和SVN的区别。我一直在按照这个教程来实现我的目标: http://dexterlin.com/tag/git/

我在我的桌面上有一个本地Git项目,然后使用终端(我使用MAC)在另一个文件夹中创建了一个裸仓库。

当我尝试让SourceTree识别这个裸仓库时,问题就出现了。但我也有点困惑,我可以在我的计算机上创建两个不同的文件夹/仓库,并将它们链接到SourceTree,但是为什么SourceTree不允许我从一个仓库推送到另一个仓库呢?

我想使用SourceTree,因为我需要一个Windows/Mac客户端来处理不同计算机上的Git操作。

所以这里有几个问题: - 在Git中是否有可能实现我的目标? - 如何使SourceTree指向我创建的裸仓库? - 将裸仓库复制到USB驱动器中,以便稍后从另一台计算机仓库中拉取,这种方法可行吗? - 如何让SourceTree允许我从裸本地仓库推送/拉取到我的本地仓库中?

非常感谢您的帮助!任何帮助都将不胜感激 :)


你不能在裸仓库中工作,那只是Git仓库的格式,用于作为公共/中央仓库。你可以从个人仓库推送和拉取它。另外,你也不能从另一个仓库向非裸仓库推送。 - Philippe
感谢您的评论,Philippe。我曾认为可以从一个非裸库推送到另一个非裸库(即用户1向用户2或反之亦然)。我会记住使用裸库作为主要更新版本,从我的两个用户非裸库中拉取/推送。 - Cris
1个回答

5

将您的裸库移动到USB设备上(例如,挂载在Z:\/Volumes/MyUsbDevice/上),或者在那里创建一个新的裸库。(我只是想指出您可以随时移动您的代码库)

$ cd /Volumes/MyUsbDevice/
$ mkdir myNewGame.git
$ cd myNewGame.git
$ git init --bare

赤裸的存储库包含您的项目在Git的二进制格式中的历史记录,而您的文件在那里无处可寻。这可能是SourceTree感到困惑的原因。
你需要做的是在想要工作的机器上创建该存储库的克隆

在Windows上:

$ git clone Z:\myNewGame.git myNewGame

在 Mac 上:

$ git clone /Volumes/MyUsbDevice/myNewGame.git myNewGame

或者你也可以使用Sourcetree,只需在其中传递你在USB设备上的git仓库位置。

如果你浏览到myNewGame/.git/config,你会看到类似这样的一段内容:

[remote "origin"]
    url = /Volumes/MyUsbDevice/myNewGame.git
    fetch = +refs/heads/*:refs/remotes/origin/*

这是 Git 存储关于你的远程裸仓库信息的地方,因此很重要的一点是你需要在未来总是将它挂载到相同的文件夹/盘符中。你可以使用 Sourcetree 进行操作,pull 会从你的 USB 设备获取更改,push 会将更改写入你的 USB 设备。你的完整历史记录将保存在三个位置:你的 Mac、Windows 和 USB 设备上。只有当你想执行 fetch、pull 或 push 操作时才需要连接 USB 设备。因此,由于你的历史记录是分布式的,所以你相对比较安全,但我仍建议你定期备份你的裸仓库。

太好了!非常感谢Thibault D.的帮助和耐心解释 - 非常感激。没错,我一定会经常从代码库备份。 - Cris
1
“裸仓库包含Git二进制格式的项目历史,而您的文件则不会在那里找到。这可能是为什么SourceTree感到困惑的原因。” 不!因为它以与个人存储库相同的方式存储,并且SourceTree能够读取它。只是ST无法检测到这是一个裸仓库(原因不是格式。几乎唯一的区别是缺少工作目录)。GitExtensions是Windows上的另一个GUI,做得不错。” - Philippe
但是我认为像BitBucket或GitHub这样的在线代码仓库本质上是裸仓库,而SourceTree能够检测它们,对吗?如果我在这方面弄错了,很抱歉,因为我对Git完全是新手,只是想学习 :) - Cris
BitBucket或GitHub上的在线存储库可能是裸存储库,虽然我们无法检查,但这并不重要。您可以将裸存储库克隆到非裸存储库中,反之亦然,这并不重要。裸存储库足以保存项目的历史记录。非裸存储库包含历史记录+文件系统上的本地副本,以便您可以在其上工作。 - Thibault D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接