【问题标题】:is it ok to copy a git folder in windows to manage multiple branches?可以在windows中复制一个git文件夹来管理多个分支吗?
【发布时间】:2019-06-04 11:35:28
【问题描述】:

我是 git 新手,并且有一个与 GitKraken 一起使用的 git 存储库。 在这个存储库中,我有多个分支,并且可以从一个分支移动到另一个分支,以便在必要时进行修改。

我现在的情况是,我将对 1 个我不想提交的分支进行一些大的修改,但同时我想对另一个分支进行一些小的修改。

我习惯使用 TFS,在那里我可以将分支检出到另一个文件夹。

我尝试只复制文件夹,我的第一印象是这应该可以工作....

但是,我看到网上的评论说我应该克隆一个存储库。

git 版本低于 2.5,所以我不能使用 Git-worktree。

只复制文件夹可以吗,还是会产生意想不到的效果?

【问题讨论】:

  • “我不想提交” - 您始终可以在本地提交它们,然后稍后再返回并撤消提交以取回您的文件并完全按照您想要的方式保留状态。跨度>
  • 这基本上就是feature branches are for。仅供参考,将您的 GIT 存储库复制到另一个文件夹没有问题。但这将是一个精确的副本(远程全部),那有什么意义呢?听起来您想要一个功能分支,但不要像@Rup 建议的那样推动它
  • 请记住,GIT 存储库是整个存储库的精确副本。因此,您也拥有服务器上的所有内容。所以你可以在本地副本上做任何你想做的事情

标签: windows git gitkraken


【解决方案1】:

是的,如果您从结帐的根目录复制整个文件夹,包括隐藏的 .git 文件夹,那么您可以单独更改每个工作副本。每个都包含自己的存储库对象副本,它们的行为就像您运行了两个单独的克隆一样。

正如 cmets 中所讨论的,这不一定是一个很好的用例,但是:将大的更改提交到本地分支会更容易(并且更节省磁盘空间),这样你就可以切换并进行其他更改。这没有真正的缺点。如果您确实想稍后删除该临时提交,那么这也很容易完成。

但是,如果您要这样做,那么您可能想要

  • 先运行git repack -ad,这样对象树中要复制的文件就更少了
  • 考虑改用git clone --reference,这可能会更节省磁盘空间
  • 或者您想要一个干净的工作副本,您可以创建一个新的工作副本文件夹,仅将隐藏的 .git 文件夹复制到新的工作副本中,然后 git reset --hard 以检查那里的所有文件。

【讨论】:

  • 它们会作为单独的克隆吗?或者它们会是某种纠缠不清的东西?例如,如果您提交一个并推送到源,那么另一个克隆是否会在同步期间无法下载新修订,因为修订元数据表明它源自该克隆 GUID?
  • AFAIK 没有克隆 GUID 这样的东西,服务器不跟踪克隆,但很高兴得到纠正。我已经尝试克隆同一个 repo 两次并区分状态:.git/logs 中存在时间戳差异,但 .git/index 文件也不同,它是二进制格式,所以我无法轻易判断发生了什么变化。我猜想任何 GUID 都会存在于 .git/config 中,但我想它可能在索引中。
【解决方案2】:

您可能想看看 git stash 是否适合您。我不建议复制到新文件夹。主要是因为我不知道这是否可能,而且我从未将其视为建议。克隆也应该有效,但听起来您对搁置/存储与在检查分支 2 之前在分支 1 中提交更改感兴趣。

https://git-scm.com/book/en/v1/Git-Tools-Stashing

【讨论】:

  • 我认为如果您有“不想提交”但想在签出不同分支之前保存的更改,则效果最好。
  • 这不是 OP 所要求的。他们希望能够在本地进行多次提交。请重新阅读问题。 我现在需要对 1 个我不想提交的分支进行一些大的修改
  • 我读过。 “复制一个 git 文件夹可以吗” 你是说 OP 想要进行多次提交。你确定你读过这个问题吗?也没有提到遥控器。如果所有的工作都是本地的并且没有远程分支怎么办。
  • 如果您的答案是“我不知道这是否可能”(直接引用此答案),这强烈暗示您有评论,而不是答案。
  • 同意,应该是评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
相关资源
最近更新 更多