9

Git で TFS を使用してビルドしようとすると、TFS の git プロバイダーがまだサブ モジュールをサポートしていないという制限があります。少し面倒ですが、コンパイルの前に TFS にバッチ ファイルを実行するように指示することができます。これを使用して手動の git スクリプトを呼び出し、「スーパー」プロジェクトのすべてのサブモジュールを更新しました。

このバッチ ファイルが実行するコマンドは単純です: git submodule update --init --recursive

サブモジュールのソースを TFS に移行する前は、これはうまく機能していましたが、上記の git モジュール スクリプトが機能しなくなったため、TFS ビルドが失敗しています。

したがって、ビルド前に TFS が行うことは、現在のソースを Git からビルド サーバー上のフォルダーにプルすることです。

このフォルダーに対して Git Bash を開き、次のコマンドを実行すると: git submodule init git submodule update

次のエラーが表示されますが、それが何であるかを一生理解できません。「スーパープロジェクト」レポがプッシュされた後にサブモジュールのコミットがプッシュされたことを一般的に示しているこの特定のエラーを検索してみました。しかし、「スーパープロジェクト」のコミットとプッシュが完了する前に、すべてのサブモジュールのコミットとプッシュが実行されていることを確認できます。TFS git コマンドの出力は次のとおりです。

james@TFS /C/Builds/1/Technique Webs/MIS Console 5.2 Development/src (5.2development)
$ git submodule init

james@TFS /C/Builds/1/Technique Webs/MIS Console 5.2 Development/src (5.2development)
$ git submodule update
Username for 'http://tfs:8080': james
Password for 'http://james@TFS:8080': <password>
From http://TFS:8080/TFS/Technique/_git/Technique%20Library
 * branch            HEAD       -> FETCH_HEAD
fatal: reference is not a tree: 33106ea146d470159e327c1b2d623d14f522cdd4
Unable to checkout '33106ea146d470159e327c1b2d623d14f522cdd4' in submodule path 'calc-engine'

james@TFS /C/Builds/1/Technique Webs/MIS Console 5.2 Development/src (5.2development)
$
4

2 に答える 2

4

多くの試行錯誤の末、同様の問題を修正しました。これは、ユーザー プロファイルなしで実行されている TFS ビルド前の PowerShell スクリプトの問題であることが判明したため、GIT はビルド ユーザーの資格情報キャッシュ設定を認識できませんでした。 (例: で設定C:\Users\theuser\.gitconfig)。

バッチ スクリプトでも同じ問題が発生します。

特徴的な動作は、git submodule呼び出しが完全にハングし、GIT リポジトリが非常に奇妙な状態になることでした (not a tree上記のエラーで示されているように)。

ハングは、使用するユーザー名とパスワードを求める GIT プロンプトが原因ですが、これは非対話型セッションであるため、すべてが停止します。

資格情報キャッシュとして使用wincredして、次の方法でこれを修正できました。

  1. ビルド ユーザーとしてビルド マシンにログオンします。
  2. コマンドライン経由で GIT サーバーにアクセスし、必要な資格情報を入力しました。
  3. Windows Credential Manager を開き、キャッシュされた資格情報が Generic Credentials セクションに表示されていることを確認しました。
  4. wincred昇格したコマンド プロンプトで、ユーザー構成ファイルがない場合でも、デフォルトでGIT を強制的に使用します。git config --system credential.helper wincred
  5. TFS からビルドを再実行しました: 動作しました。
于 2014-12-08T17:25:31.713 に答える
0

その理由は、「Git Bash」がビルド アカウントの資格情報を認識しておらず、毎回インタラクティブにプロンプ​​トを表示する必要があるためです。実際、ビルド アカウントがすべてのサブモジュールのリモート リポジトリにアクセスできる場合は、資格情報のプロンプトに空のユーザー名とパスワードを指定するだけで済みます。資格情報マネージャーは空のユーザー名を受け入れないため、これは Windows では簡単ではありません。

サブモジュールの URL を以下のようなものに変更することを回避する 1 つの方法。「@」記号は、空のユーザー名とパスワードを入力するのと同じです。

[submodule "..."]
    path = ...
    url = http://@tfs:8080/...
于 2015-04-23T06:50:39.950 に答える