Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 是否可以快速保存更改,以便通过USB密钥将更改传输到另一台机器?_Git - Fatal编程技术网

Git 是否可以快速保存更改,以便通过USB密钥将更改传输到另一台机器?

Git 是否可以快速保存更改,以便通过USB密钥将更改传输到另一台机器?,git,Git,我有一台工作机器和一台家用机器,两台机器上都是同一个在线回购的克隆。在我离开工作之前,我做了一些我没有时间完成的改变,但我想把它们带在身边,这样我可以在家里继续工作 我想避免: 通过创建新分支机构或其他方式推动对在线回购协议的任何更改,因为我不希望用不必要的承诺来污染回购协议 制作整个回购协议的副本,因为它非常大 在Windows资源管理器中筛选以获取所有文件并手动复制它们,因为有相当多的文件 基本上,有没有一种快速的方法可以将我的“正在进行的工作”带回家,而无需推送?我知道您说过您不想进行

我有一台工作机器和一台家用机器,两台机器上都是同一个在线回购的克隆。在我离开工作之前,我做了一些我没有时间完成的改变,但我想把它们带在身边,这样我可以在家里继续工作

我想避免:

  • 通过创建新分支机构或其他方式推动对在线回购协议的任何更改,因为我不希望用不必要的承诺来污染回购协议
  • 制作整个回购协议的副本,因为它非常大
  • 在Windows资源管理器中筛选以获取所有文件并手动复制它们,因为有相当多的文件

基本上,有没有一种快速的方法可以将我的“正在进行的工作”带回家,而无需推送?

我知道您说过您不想进行分支或其他操作,但是您可以拥有本地分支,然后将其作为远程分支推送到git存储库。然后,您就可以回家,将远程分支拉到您家中的机器上,并继续对其进行操作。你可以一次又一次地做这件事,回家再回去工作,你希望多久就多久。 完成后,将远程分支合并到(开发或主分支)中,然后将其删除。那树枝好像从未存在过。在git中,如果底层git服务器支持,您还可以拥有私有分支,这样其他人就无法看到该分支。
文件的复制或者你试图用的其他方式只是剥夺了git的实用性,因为它是分布式的,而且分支的成本很低,所以在需要时进行分支和合并要容易得多。有很多提交并不是一件坏事。

创建一个WIP分支似乎真的是一种方法,它非常快,而且很容易摆脱。也就是说,我认为如果您真正想做的事情是可能的,那么位于中心位置的“diff”文件将位于您的.git文件夹中。但我并不知道,即使这是可能的,它似乎比仅仅创建远程分支更肮脏、更危险……:/

所以,我要做的是

git branch WIP
git checkout WIP
push the branch to master 
checkout the branch from home
git rebase -i once you're ready to commit (to squash the "unnecessary commits")
delete the remote branch

一旦你掌握了这个节奏,它真的非常快速和无痛,而且使用像git这样的分布式VCS的胜利首先,我应该说我也推荐Will Buck的WIP分支回答,因为它们很容易创建和销毁,而且很轻

无论如何,你所要求的是可能的

您可以从一组提交创建一组修补程序,将它们复制到USB,然后在家中应用它们

所有这些步骤都可以通过:和完成

git格式补丁
将根据指定的提交生成补丁文件列表

git-am
将在
头部的顶部应用指定的补丁文件


这本书提供了更多关于如何使用这些命令的信息。

这是一个可以省去其他人麻烦的否定答案:我认为如果你的U盘足够大,可以容纳存储库,而你只是不想每次都等待一个副本,那么将git stash与推送到USB相结合将是一个合适的工具。但是,不可能简单地推送隐藏状态,因为隐藏实际上使用reflog,而不仅仅是ref
refs/stash
使用

git bundle

它就是为此而设计的。它将只存储您告诉它的内容。

随身携带您的计算机。你试图避免的事情有一些矛盾。带上你的电脑可能并不总是可能的。我不能把我的笔记本电脑带到一些高安全性的网站,因为它有一个内置的网络摄像头。在这种情况下,我会带上一个带有Git存储库克隆的USB密钥,以便与一台现场计算机同步。正确的说法是,存储库是DAG的一部分。推它,推它的祖先。请参见
git bundle
。存储不是彼此的祖先,因此按stash ref只会按最上面的存储。我的意思是,您可以用一个存储拖动历史-而不是一个存储是否被另一个存储引用。当然可以。最上面的藏品可以,但其他的不行。因此,这实际上可能足以同步“当前在制品”。不过我还没有试过。你可以将所有的存储捆绑在一起,而不包括你想要的历史记录。这似乎是最简单的方法。Pro-Git有一个使用
Git bundle
命令的演练。您只需将创建的捆绑包放在usb驱动器上,以便将其传送回家。我最终还是将git diff管道化到了一个文件中,因为我的更改没有提交——但是如果我发现自己处于类似的情况,git bundle显然是今后的发展方向。非常感谢。只需
git checkout-b workForHome
git add-A
git bundle HEAD^..workForHome