用于将 project/changes/commits 传输到单独机器上的离线存储库的裸 git 存储库的工作流程和设置?

Workflow and setup of a bare git repository for transferring project/changes/commits to offline repository on a seperate machine?

我在某处的服务器上有一个 git 存储库,我在其中对我的软件进行长期更改。我使用 Visual Studio 在 Windows 机器上开发此软件。我通过 Visual Studio 提交并通过 Git CLI 工具将更改推送到服务器。该软件主要在离线机器上使用,尽管一些开发和错误修复是在这台离线机器上完成的。

我目前有两个问题。首先,将整个 Visual Studio 项目文件夹(也是 .git 存储库)从在线开发机器复制到离线机器需要相当长的时间,特别是考虑到代码库的小改动(有时我只是直接复制文件)。其次,我经常忘记将 changes/"production bug fixes" (yea) 从离线机器移回开发机器。

在开始 post 一个关于如何通过 git 执行此操作的问题(从另一个本地存储库更新本地存储库)之后,我发现了一些重复的问题,即 this question. It provides a descent selected answer, but I am more interested in this answer。它建议创建一个 --bare git 存储库。

我的问题是,在上述情况下,这是实施和使用 --bare 存储库来解决我的问题的正确方法吗

这个工作流程对我来说似乎是正确的,尽管我认为唯一完全不正确的是进出 bare 存储库的 push/pull 命令;特别是关于开发机器上的本地工作目录(How to denote push/pull from the server or the bare repository)。

我会建议你在开发机器和离线机器之间捆绑提交

不建议使用bare repo的原因:

您不能将更改从离线机器直接推送到开发机器上的裸仓库。相反,您总是需要在两台机器之间复制裸仓库。并且您的回购大小增加,复制和粘贴的速度可能会减慢。

所以你可以先捆绑branch/commits,然后在两台机器之间复制粘贴捆绑文件(体积小)。详细步骤如下:

1。捆绑来自开发机器的 master 分支的提交

在您的本地存储库中(假设它在 C:\develop\repo 中),使用以下命令将提交捆绑到 master 分支:

git bundle create branch.bundle master

然后文件 branch.bundle 将在您的本地存储库中创建。

2。将 master 分支的提交解绑到你的离线机器

从开发机复制bundle文件branch.bundle到离线机到一个目录(比如C:\offline\branch.bundle)。然后通过

在 git 仓库中解绑 master 分支
git clone branch.bundle -b master repo

因此在 C:\offline\repo 中创建了一个带有 master 分支的本地 git 回购(与开发机器具有相同的提交历史)。您可以使用此存储库并进行更改。

3。在离线机器上提交更改并捆绑 commits/branch

当你想将离线机器上的更改应用到开发机器上时,你可以先通过以下方式捆绑提交:

git bundle create commits.bundle master ^commit

上面命令中指定的提交将告诉 git 将下一次提交的提交捆绑到 master 分支。

如果你不想每次都检查提交的 sha-1 值,你可以通过以下方式捆绑整个 master 分支:

git bundle create branch.bundle master

4。将离线机器的提交解绑到开发机器

从离线机器复制包文件commits.bundlebranch.bundle到开发机器本地repo目录C:\develop\repo。并将提交的离线机器应用到本地仓库,如下所示:

git checkout master #If the current branch is not master branch
git pull branch.bundle master #Or git pull commits.bundle master

更多细节,可以参考文档Bundling