11

I inherited a project stored in CVS. The previous developer has massive un-committed changes in his working directory, including removal of a ton of files, that I would like to inspect. Here's my plan:

  1. cvs checkout the_project.
  2. Follow the remote cvs / local git workflow, initializing a git repo with the pristine state of the_project.
  3. Copy the new .git into the the other working directory.
  4. Presto! All the removals/changes show up as unstaged differences.

This initially looks like it's gonna work. Any major pitfalls I should worry about?

4

3 に答える 3

4

私はいつも似たようなことをしています。私は GIT を使用して、大規模な SVN プロジェクトから複数のリリースと複数のブランチを追跡しています。プロジェクトには、「src」のサブディレクトリにそれぞれ約 200 個の SVN モジュールがあります。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フィート。この時点で、2 つのディレクトリからシンボリックにリンクされた 1 つの 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 に答える