【问题标题】:Overlay A' project over earlier A project: Seeking Git Use Case/Pattern to delete A files no longer needed?Overlay A' project over early A project: Seeking Git Use Case/Pattern to delete A files no longer need?
【发布时间】:2018-04-04 03:44:51
【问题描述】:

假设具有子目录 (A) 的非版本控制项目目录。 一年后,该目录被复制并进行了进一步的开发 (A')。

我刚刚将早期版本 A 添加到 Git。本着版本控制的精神,我希望将 A' 文件复制到 A 文件上(毕竟它们是同一个项目),但我试图系统地删除在以后的 A' 版本中不再存在的 A 文件。

我已经用 Google 搜索了很长时间,但似乎找不到(我敢打赌)经常发生的这种情况的最佳做法,所以我希望有一个众所周知的“秘诀”来解决它关闭而不编写自定义代码。

是否可以使用 git-diff --diff-filter=D ("Deleted") 生成 rm's 以使 A 的“残基”不再驻留在源代码管理中?

【问题讨论】:

  • 你为什么要这样做?你想保留什么?你的回答将帮助我做出更好的回应。
  • @JDB 只希望在版本控制下将初始版本和修订版本作为同一个项目进行跟踪——就像任何其他软件项目一样。
  • 哦...是的,没有优雅的方法可以做到这一点。听起来您想修改 git 提交的历史记录。这是可能的,但会非常混乱,对于任何正在进行的工作来说都是一个巨大的问题。您基本上将git init 包含在您的A 项目的目录中,然后添加一个提交。然后设置您的来源并获取您的主分支。然后你需要在A 上重新设置master。对于拥有基于 master 分支的任何人(包括您已经拥有的任何 dev 或 release 分支),这将导致一些小灾难。
  • 哦...等等...A' 是一个 git repo 还是只是另一个没有版本化代码的目录?

标签: git git-diff delta git-difftool


【解决方案1】:

所以如果AA' 只是两个不同版本的代码目录,而你正在创建一个全新的git repo,那么这实际上非常简单。

由于您已经使用 A 文件设置了 git 存储库,您需要做的就是删除存储库目录中的所有内容(当然,任何 git 文件/文件夹除外),然后复制文件来自A',然后添加一个新的提交。

所以,你的 git 历史看起来像这样:

z9y8x7w6v current state (A')
a1b2c3d4e f1rst p0st (A)

您将能够比较AA' 之间的变化,但任何新工作都将从A' 开始。这只会确保您将 A 作为您的 git 历史记录中的旧工件。

旁注:很高兴您现在正在考虑这个问题。如果您等待,并且在 repo 中已经从 A' 完成了任何工作,那么将 A 插入历史记录将非常困难。

【讨论】:

  • 就这么简单?呃...谢谢@JDB!
猜你喜欢
  • 2022-12-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2021-02-13
  • 2015-01-21
  • 2021-10-31
  • 2022-12-01
相关资源
最近更新 更多