Я пытаюсь сделать следующее в C #:
- Получите разницу между двумя ветвями.
- Перенаправить вывод в файл патча.
- Оформить заказ на новую пустую ветку.
- Применить файл исправления к этой новой ветке.
- Добавить файлы и зафиксировать эту ветку в удаленном репо.
Текущие команды git, которые я выполняю:
git checkout branch2
git diff branch1 > delta.patch
git checkout --orphan delta_branch
git rm -rf .
git apply delta.patch
git add -A
git commit -m "Adding a temporary branch.."
git push -u origin delta_branch
Хотя это нормально работает с git bash, этого не происходит при выполнении его из C #, и я получаю следующее сообщение для команды diff:
git diff branch1 > delta.patch
EDIT:
Метод C #, который я использую для запуска каждой из вышеупомянутых команд, следующий:
public void ExecuteGitCommand(string sourceDirectory, string gitExePath, string command)
{
ProcessStartInfo gitInfo = new ProcessStartInfo();
gitInfo.CreateNoWindow = true;
gitInfo.RedirectStandardError = true;
gitInfo.RedirectStandardOutput = true;
gitInfo.FileName = gitExePath;
gitInfo.UseShellExecute = false;
Process gitProcess = new Process();
gitInfo.Arguments = command;
gitInfo.WorkingDirectory = sourceDirectory;
gitProcess.StartInfo = gitInfo;
gitProcess.Start();
string output;
string error;
using (StreamReader streamReader = gitProcess.StandardOutput)
{
output = streamReader.ReadToEnd();
}
using (StreamReader streamReader = gitProcess.StandardError)
{
error = streamReader.ReadToEnd();
}
Console.WriteLine("Output:");
Console.WriteLine(output);
if (!string.IsNullOrEmpty(error))
{
Console.WriteLine("Error:");
Console.WriteLine(error);
}
gitProcess.WaitForExit();
gitProcess.Close();
}
И это называется так:
string[] commands = new string[] { gitCheckout, gitDiff, gitCheckoutDelta, gitRmDeltaFiles, gitApplyPatch, gitAdd, gitCommit, gitPush };
foreach(string command in commands)
{
Console.WriteLine(command); //debug only
ExecuteGitCommand(sourceDirectory, gitExePath, command);
}
Примечание: я использую LibGit2Sharp в других частях моего проекта, но в этом конкретном случае я не могу использовать его, поскольку LibGit2Sharp не реализует git-apply .