首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工作流和建立一个裸的git存储库,用于在单独的机器上将项目/更改/提交转移到脱机存储库?

工作流和建立一个裸的git存储库,用于在单独的机器上将项目/更改/提交转移到脱机存储库?
EN

Stack Overflow用户
提问于 2018-04-23 19:37:06
回答 1查看 766关注 0票数 1

我在服务器上有一个git存储库,在那里我会对我的软件进行长期的更改。我使用Visual在Windows机器上开发这个软件。我通过Visual提交并通过Git工具将更改推送到服务器。该软件主要用于离线计算机,但在这台离线计算机上进行了一些开发和错误修复。

我目前的问题有两方面。首先,需要相当长的时间才能将整个Visual项目文件夹(也是.git回购)从联机开发机器复制到脱机计算机,特别是考虑到对代码库的小改动(有时我只是直接复制文件)。其次,我经常忘记将更改/“生产bug修复”(yea)从脱机计算机移回开发机器。

在开始发布一个关于如何通过git (从另一个本地存储库更新本地存储库)进行此操作的问题之后,我发现了一些重复的问题,即这个问题。它提供了一个下降选择的答案,但我更感兴趣的是这个答案。它建议创建一个--bare git存储库。

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

  • 在开发机器上,从服务器或本地存储库创建远程主存储库的克隆,但使用--bare参数(git clone --bare /my_remote_path/project.git)。
  • 将这个存储库作为一个/源文件添加到已经到位的工作git目录(git remote add origin /my_local_path/project.git)中。
  • 在常规开发过程中,使用git push origin master (到服务器)和git push origin(到本地--bare),将更改推送到这个本地、git push origin、存储库和远程存储库。
  • 若要将更改从开发机器移动到脱机计算机,请将整个bare存储库文件夹复制到脱机计算机。在脱机机器上,将bare存储库添加为/原点(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存储库的推/拉命令;特别是对于开发机器上的本地工作目录(如何表示从服务器或bare存储库中的推拉)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-24 02:52:41

我建议您使用包在开发机器和脱机机器之间提交

为什么不建议使用裸回购:

您不能直接将更改从脱机计算机推送到开发机器上的裸回购。相反,您总是需要在这两台机器之间复制裸回购。和你的回购规模增加,它可能放慢复制和粘贴。

因此,您可以首先绑定分支/提交,然后在两台机器之间复制和粘贴包文件(大小较小)。具体步骤如下:

1.从开发机器捆绑主分支的提交。

在您的本地回购(assunme在C:\develop\repo中)中,使用下面的命令来绑定master分支上的提交:

代码语言:javascript
复制
git bundle create branch.bundle master

然后将在本地回购中创建文件branch.bundle

2.解压缩主分支到脱机计算机的提交。

将包文件branch.bundle从开发机器复制到脱机计算机到目录(如C:\offline\branch.bundle)。然后,通过以下方式将master分支解压缩到git中:

代码语言:javascript
复制
git clone branch.bundle -b master repo

因此,在master中创建了一个具有C:\offline\repo分支的本地git (与开发机器具有相同的提交历史)。你可以用这个回购工具做些改变。

3.在脱机计算机上提交更改并将提交/分支捆绑在一起

当您想应用从脱机计算机到开发机器的更改时,可以首先通过以下方式绑定提交:

代码语言:javascript
复制
git bundle create commits.bundle master ^commit

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

如果您不希望每次检查commit sha-1值,则可以通过以下方式扩展整个master分支:

代码语言:javascript
复制
git bundle create branch.bundle master

4.将提交从脱机机器解压缩到开发机器。

将包文件commits.bundlebranch.bundle从脱机计算机复制到开发机器本地回购目录C:\develop\repo。并将提交脱机计算机应用于本地回购,如下所示:

代码语言:javascript
复制
git checkout master #If the current branch is not master branch
git pull branch.bundle master #Or git pull commits.bundle master

更多细节,您可以参考文档捆绑

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49988724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档