11

我继承了一个存储在 CVS 中的项目。之前的开发人员在他的工作目录中有大量未提交的更改,包括删除大量文件,我想检查这些更改。这是我的计划:

  1. cvs 签出 the_project。
  2. 遵循远程 cvs / 本地 git 工作流程,使用 the_project 的原始状态初始化 git 存储库。
  3. 将新的 .git 复制到另一个工作目录中。
  4. 快!所有删除/更改都显示为未分级的差异。

最初看起来它会起作用。我应该担心的任何重大陷阱?

4

3 回答 3

4

我一直在做类似的事情。我使用 GIT 跟踪大型 SVN 项目的多个版本和多个分支。该项目有大约 200 个 SVN 模块,每个模块都位于“src”的子目录中。当我启动 GIT 存储库时,我检查了项目的 v9.4.4,添加了 .gitignore 和 .gitattributes 的 'git init',添加了 'git add -A' 和 'git commit -m 'v9.4.4'。然后我.git 移出项目并创建了一个符号链接。当 v9.4.5 版本发布时,我检查了它,添加了一个符号链接到现在共享的 .git 目录,添加了 .gitignore 和 .gitattributes,执行了 'git add -A' 和 'git commit -m'v9。 4.5'。此时,我有一个从两个目录符号链接的 GIT 存储库。

通过此设置,您可以执行任何不涉及工作目录的 git 操作。因此,对于我的应用程序,'git diff v9.4.4..v9.4.5' 效果很好。当然,您也可以执行涉及索引和工作目录的 git 操作,但是您需要注意该存储库位于您所在版本的正确提交位置。

我也将它用于多个分支。在这种情况下,使用 'git symbolic-ref HEAD refs/heads/a-branch' 在不接触工作目录的情况下更改分支至关重要。因此,当我的项目版本 s3 出现时,我做了一个“git branch s3 v9.4.4”,创建了我的 .git 符号链接,做了“git symbolic-ref HEAD refs/heads/s3”,并在它后面加上了“add”和'犯罪。'

于 2012-04-18T03:04:07.253 回答
2

这应该没有问题,但是您可能希望在执行此操作后尝试运行git fsck --full以验证数据库中对象的连接性和有效性。相比之下,另请参阅 Stack Overflow 问题“我可以将 Git 工作副本复制到另一台机器上吗?” . 这是一个略有不同的场景,但相对而言具有可比性。

于 2012-04-17T23:52:58.007 回答
0

是的,那会奏效。你当然也可以做相反的事情 - 删除除 之外的所有内容.git并从其他地方粘贴文件。

于 2012-04-17T23:46:51.363 回答