2

私は簡単なバッチファイルを持っています:

cd <path to my git repository>
git pull

次のC#関数で実行しようとしています。

private NuGetBO.ShellCommandReturn ExecuteCommand(string path)
{
    ProcessStartInfo processInfo;
    Process process;

    processInfo = new ProcessStartInfo(path);
    processInfo.CreateNoWindow = true;
    processInfo.UseShellExecute = false;

    // *** Redirect the output ***
    processInfo.RedirectStandardError = true;
    processInfo.RedirectStandardOutput = true;


    process = Process.Start(processInfo);
    process.WaitForExit(5000);

    // *** Read the streams ***
    string output = process.StandardOutput.ReadToEnd();
    string error = process.StandardError.ReadToEnd();

    int exitCode = process.ExitCode;
    process.Close();
    return new NuGetBO.ShellCommandReturn { Error = error, ExitCode = exitCode, Output = output };
}

しかし、次のエラーが発生します。

"Access is denied.\r\nfatal: Not a git repository (or any of the parent directories): .git\n"

つまり、C#からバッチファイルを何時間も成功せずに実行しようとしましたが、コマンドラインで実行すればバッチファイルは問題なく機能します。

C#関数を機能させるにはどうすればよいですか?バッチファイルまたはC#関数で何を変更する必要がありますか?ありがとう

編集:

バッチファイルの内容を次のように変更しました。

cd <path to my git repository> && git pull

しかし、次のエラーが発生します。

Access is denied.

EDIT2:

フォルダへのアクセスを追加しましたが、新しいエラーが発生します。

fatal: Not a git repository: "../.git/modules/myProject\n"

EDIT3:

EDIT2に記載されているフォルダへのアクセス権を付与しましたが、次のエラーが発生します。

"error: unable to create directory for C:/myFolder/.git/modules/myProject/ORIG_HEAD\nfatal: Cannot lock the ref 'ORIG_HEAD'.\n"
4

3 に答える 3

1

今は動作します。私が抱えていたのと同じ神経を壊す問題がないように、同じことをしなければならない将来の人は、次のことを確認する必要があります。C#コードを実行しているユーザーがいるので、彼/彼女に電話しましょうUser

1. User must have privileges to the folder where the git pull should be running.
2. User must have privileges to the folder where the git repository is located (its path is described in the .git file located in the folder described at 1.)
于 2012-11-16T12:49:49.247 に答える
1

processInfo.WorkingDirectorygitリポジトリの場所に設定する必要があります。

于 2012-11-15T22:19:12.610 に答える
1

ライブラリ全体を統合することに興味がある場合は、これが役立つかもしれませ

于 2012-11-23T09:59:33.483 に答える