web-dev-qa-db-ja.com

VSSでローカルGitを使用する方法

私の雇用主はまだVisualSourceSafe6を使用しています。すべてがVSSのメインプロジェクトディレクトリにチェックインされます。それらはVSSで分岐を使用していません。チェックインはQAにリリースする準備ができているはずであり、ビルドを中断してはなりません(強制されません)。

Gitをローカルリポジトリとして使用して、機能(ブランチ)ごとの変更を追跡し、VSSにコミットする前に変更の履歴を取得できるようにします。一部の変更は、VSSにチェックインできるようになるまでに3〜4日以上かかる可能性があるため、これが必要です。

注:いくつかのgitの概念についての私の理解は非常に新しく、オフベースである可能性があります。

これらの同様の質問を読んだ後:

以下は私がやろうと思っていたことです:

C:\ VSS\ProjectAここでVSS固有のアクションget-latest-version、chechout、checkinなどを実行します。他の開発者は引き続きVSSを使用し、一部の開発者は私のようなVSSでgitを使用する可能性があるため、ソリューション/プロジェクトファイルにはVSSへのバインドがあります。

C:\ MY\ProjectAここで、開発作業を行い、gitワークフローを使用します。

私がしたフォルダーを設定するには:

  • VSSからC:\VSS\ProjectAに最新バージョンを取得します
  • C:\VSS\ProjectA>git initC:\VSS\ProjectA>git add .、これが私のマスターブランチになります
  • git clone C:\VSS\ProjectA C:\MY\ProjectA、これが私の開発クローンになります

Q:ソリューション/プロジェクトファイルにVSSバインディングがある場合、VisualStudioはgitクローンフォルダーC:\MY\ProjectAからでもVSSに接続しようとします。だから私はクローンの後にVSSバインディングを削除する必要がありますよね?

機能に取り組むとき、私はする必要があります:

  • vSSからC:\VSS\ProjectAに最新バージョンを取得します
  • Q:変更したファイルをマスターgitリポジトリにコミットする必要がありますか?
  • C:\MY\ProjectA>git fetchおよびC:\MY\ProjectA>git checkoutQ:正しいですか?
  • 開発リポジトリで分岐、コミット、マージ、リベースなどを実行します
  • 開発リポジトリとマスターリポジトリの差分を取得し、VSSでそれらのファイルをチェックアウトする
  • C:\MY\ProjectA>git PushQ:正しいですか?
  • C:\VSS\ProjectA>git checkoutQ:正しいですか?
  • C:\VSS\ProjectA>git commitQ:正しいですか?
  • チェックインによりファイルがVSSに変更されました

[〜#〜] update [〜#〜]git for windows(VisualStudio2015)は、ベアでないローカルリポジトリへのプッシュをまだサポートしていないようです。回避策はありますか?

3
user2321864

参考までに、VSS2005を使用した私の方法。

プロジェクト1日目

  1. プロジェクト全体をprojVssという名前のディレクトリに再帰的にチェックアウトします。
  2. チェックアウトを元に戻して、他の人にリリースします。
  3. ディレクトリprojVssを別の名前のprojMyにコピーします
  4. ProjVssとprojMyの両方をgitinitします

いつでもN、

  1. ProjMyに取り組みます。好きなバージョン管理を行い、projVssはそのままにしておきます。

作品を提出するには

  1. 作業をコミットし、projMy内のコミットされていないファイルをクリーンアップします
  2. プロジェクト全体を再帰的にprojVssにチェックアウトします。他の人がチェックインした変更を、必要なレビューなしにprojVssにコミットします。
  3. 作業ファイルをprojVssからprojMyにコピーして上書きします。古いバージョンのファイルから変更を破棄し、他のユーザーのコードをマージします。
  4. によってパッチを生成します

    git diff lastSubmitVerHash head --name-only | Zip ../projPatch.Zip -@

  5. パッチを抽出して上書きすることにより、projVssにパッチを適用します

  6. ProjVssでパッチをコミットします。マージを確認します。
  7. VSSはチェックイン時にファイルを自動的に追加しないため、によって新しく追加されたファイルのパッチを生成します。

    git diff lastSubmitVerHash head --name-only -diff-filter=A | Zip ../projPatchNew2Vss.Zip -@

  8. 同様に、VSSはチェックイン時にファイルを自動的に削除しないため、削除するファイルをリストアップします。

    git diff lastSubmitVerHash head --name-only -diff-filter=D

  9. VSSで再帰的にチェックインします。

  10. ProjPatchNew2Vss.Zip内のファイルをVSSに抽出します
  11. 14に従ってファイルを手動で削除します。多くはいけないので、それが私が行うことです。

N + 1日目に、5〜16を繰り返し、8〜14をすばやく実行して、短いチェックアウト(ロック)時間を有効にすることができます。

問題

更新する必要があるファイルについては、VSSチェックアウトの警告に注意を払う必要があります。他の人がチェックアウトしている場合でも、チームメートにリリースを依頼する必要があります。

2
chingNotCHing