0

为客户提供支持,他们发送他们的代码库并要求解决这个问题,在他们发送的 zip 中,通常有一个 .git 文件夹,我可以用来查看他们一直在做什么,通常是自上次以来的几次提交和一些新分支我看到了。

我不禁觉得我应该能够将我不时收到的 zip 文件中的 .git 文件夹与 repo 的本地副本合并,我可以保留我用来支持它们的任何历史记录、测试工具等。

客户不会使用 git hub 之类的东西。

我确信 git 可以处理它,但我就是想不出符文。实际上,我希望它为我上次看到 repo 之后的所有内容创建补丁,并在我的上“播放它们”。

4

3 回答 3

2

假设你有你的“工作副本”在/home/me/project.

您可以创建一个新的(空)目录/home/me/clientversion
在此目录中解压缩 zip 存档的最新副本。

从中/home/me/project,您可以添加一个指向该目录的远程:

git remote add client /home/me/clientversion

然后执行git fetch client.

在 hostory 中project,您现在将看到分支的状态clientversion作为对 的引用client/branch_name

您甚至可以拉取、合并、跟踪遥控器...

clientversion更新:从project执行中解压缩新的 zip 存档git fetch client

--

注意:正如其他答案中所建议的那样,git bundle将为您提供一种更清洁的方式来管理相同的事情。

于 2015-06-23T15:58:54.997 回答
1

您可以让他们将其存储库(或其中的一部分)导出为 git 包。请参阅http://git-scm.com/docs/git-bundle

命令

git bundle create filename master

创建一个名为的文件filename,其中包含一个捆绑的存储库,直到 . 标记的修订版master。通过在命令行中列出它们可以包含多个分支/提示:

git bundle create filename master develop bugfix-mybug

然后您可以在本地存储库中将捆绑包添加为远程并从中提取:

git remote add some-remote-name filename
git fetch some-remote-name
git merge some-remote-name/master

如果您知道目标存储库已经有一些提交,您可以导出部分捆绑包,方法是为捆绑包指定基本提交或基于时间。命令:

git bundle create mybundle --since=10.days master
git bundle create mybundle version1...master

将创建包含重建主分支所需的所有提交的捆绑包,假设捆绑包的消费者分别具有 10 天前的版本master或标签/分支指向的提交version1

当客户端生成一个新的捆绑包供您使用时,只需替换文件并再次运行git fetch some-remote-name

于 2015-06-23T15:55:59.973 回答
1

您可以将存储库视为远程存储库并从那里提取更改,您可以将其与您的分支合并,或者重新建立您的分支。

移动 zip 文件并不是最有效的传输方式,但它确实有效。传输 .git 目录就足够了,您可以git gc在压缩之前使用它以节省空间。

在另一个方向,您可以使用git bundle创建一个仅包含缺失部分的,这将更容易合并。

于 2015-06-23T15:58:22.213 回答