将git存储库复制到脱机计算机并通过记忆棒推/拉

Beg*_*ner 14 git offline-mode

我需要在离线机器上工作,我无法访问我的存储库.现在我也不想错过完全使用Git.

问题:

  • 通过记忆棒将我的存储库复制到离线机器的最佳方法是什么?
  • 有没有办法通过文件系统复制补丁?

编辑:我应该说,我将不得不将记忆棒交给管理员,管理员将为我复制,即我不能用我的用户安装棒.

Aar*_*lla 12

要复制完整的Git仓库,您只需复制该文件夹.git; 它包含一切.Git使用安全的文件名并忽略了repo中的时间戳,因此这些数据对于通常的文件系统怪癖是安全的.

在目标计算机上,创建一个文件夹,复制其中的.git文件夹.现在git checkout <branch>将为您提供工作副本.

如果要来回移动补丁而不是整个回购,则git format-patch <branch>创建它们.该命令将创建更新远程仓库所需的所有补丁(即输出将包含尚未推送的所有内容).你也可以给它提交ID(=从这个提交开始)或范围.

要应用它们,请使用git am < 0001....远程仓库.

有关:


yig*_*yig 7

该命令git bundle就是为此而设计的。例如,要离线克隆存储库的 master 分支,

cd my-repository
git bundle create offline-repos master
Run Code Online (Sandbox Code Playgroud)

这会将整个master分支存储在名为offline-repos. 将文件复制到另一台计算机。在该计算机上,输入

git clone -b master offline-repos new-repos
Run Code Online (Sandbox Code Playgroud)

new-repos这将创建从 检出的文件夹offline-repos。您从中克隆的捆绑文件将被视为远程存储库。您甚至可以创建一个包来存储自引用以来的更改,如下所示:

git bundle create offline-repos e45ad329..master
Run Code Online (Sandbox Code Playgroud)

如果将捆绑文件替换offline-repos为包含新更改的捆绑包,则可以git pull从中进行更改,如下所示:

cd new-repos
git pull
Run Code Online (Sandbox Code Playgroud)


drR*_*rtz 6

要将您的仓库复制到记忆棒,只需使用git clone,然后使用git pull它来更新它.

例如,在你的在线计算机上,安装了记忆棒,就可以了

cd <memory-stick-mount-point>
git clone <local-path-to-git-repo>
Run Code Online (Sandbox Code Playgroud)

现在<local-path-to-git-repo>它将成为origin你的usb-stick上的repo 的遥控器,所以稍后你可以简单地使用git push/pull(当安装在在线机器上时)来同步你的离线工作.

记忆棒上的git repo是独立的,所以现在你可以在任何计算机上对抗它,然后在你的在线机器上安装它时如上所述同步.

编辑,重新:不允许自己安装棒:

如果你可以要求管理员把git clone回购记录放到记忆棒上就可以了.否则,您的管理员可以简单地将整个project.git目录(如果它是一个简单的仓库)或项目/ .git(否则)复制到您的记忆棒,并且您可以反对它,需要注意的是遥控器等等将是在线机器的那些.

然后,拉动不是问题,但如果您不相信您的系统管理员为您解决合并冲突,推送可能需要进一步解决.如果你有自己的分支,那么合并不是问题.否则要进行"离线"合并,你可以有两个 repo的离线副本,一个是你工作的,一个是你的"origin",当你回来时,请求sysadm把git拉到"origin" repo,然后,在离线计算机上,执行两个记忆棒回购之间的合并,然后让sysadm将您的原始仓库合并到在线仓库中.

尽管如此,这感觉有点脆弱并且对竞争条件开放,所以我真的会尝试在"离线"之前创建单独的分支.

  • 是的,我只是想强调一个裸仓库中没有一个`.git`目录,它**是.git目录但可能有任何名称. (2认同)