用于将 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
参数 (git clone --bare /my_remote_path/project.git
)。
- 将此存储库作为 a/the 来源添加到已经存在的工作 git 目录 (
git remote add origin /my_local_path/project.git
)。
- 在常规开发期间将更改推送到此本地
bare
存储库,并使用 git push origin master
(到服务器)和 git push origin
(到本地 --bare
).
- 要将更改从开发机器移动到离线机器,请将整个
bare
存储库文件夹复制到离线机器。在离线机器上添加 bare
存储库作为 a/the origin (git remote add origin /my_local_offline_path/project.git
)
- 从这个新源
git pull origin
/git push origin
在离线计算机上推送和拉取更改。虽然这显然不会影响未跟踪的文件,但没关系。
- 最后,要将更改从离线机器移动到开发机器,请将整个
bare
存储库文件夹复制到开发机器。在开发机器上使用 git pull origin
从本地工作存储库中拉取更改。保存对服务器的更改从本地工作目录推送到服务器 git push origin master
。
这个工作流程对我来说似乎是正确的,尽管我认为唯一完全不正确的是进出 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.bundle
或branch.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。
我在某处的服务器上有一个 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
参数 (git clone --bare /my_remote_path/project.git
)。 - 将此存储库作为 a/the 来源添加到已经存在的工作 git 目录 (
git remote add origin /my_local_path/project.git
)。 - 在常规开发期间将更改推送到此本地
bare
存储库,并使用git push origin master
(到服务器)和git push origin
(到本地--bare
). - 要将更改从开发机器移动到离线机器,请将整个
bare
存储库文件夹复制到离线机器。在离线机器上添加bare
存储库作为 a/the origin (git remote add origin /my_local_offline_path/project.git
) - 从这个新源
git pull origin
/git push origin
在离线计算机上推送和拉取更改。虽然这显然不会影响未跟踪的文件,但没关系。 - 最后,要将更改从离线机器移动到开发机器,请将整个
bare
存储库文件夹复制到开发机器。在开发机器上使用git pull origin
从本地工作存储库中拉取更改。保存对服务器的更改从本地工作目录推送到服务器git push origin master
。
这个工作流程对我来说似乎是正确的,尽管我认为唯一完全不正确的是进出 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
)。然后通过
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.bundle
或branch.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。