Идея такова. Мы запускаем внутренний «GitLab» с кучей репозиториев. Некоторые из этих репозиториев используются людьми UX, которые они хотели бы синхронизировать с веб-сайтом, используемым для того, чтобы показывать клиентам свою работу. Они попросили меня создать интерфейс, в котором использование может ввести URL-адрес своего репозитория, и я бы синхронизировал его с веб-сайтом.Создать структуру папок с помощью LibGit2Sharp?
Я создал запланированную задачу, которая будет читать веб-сайт для введенных репозиториев, а затем с помощью «LibGit2Sharp» получить файлы локально. Затем эти файлы будут переданы на веб-сайт с использованием FTP.
Отличный дизайн? Нет, но я все еще участвую, и это всего лишь внутренний проект, прежде чем я приземлюсь на другого клиента.
В аффекте я хотел бы получить репозиторий и поместить каждую ветку в свою собственную папку. Я успешно получил репозиторий и вытащил последнее. И я также сделал checkout для переключения ветвей, но тогда pull не работал, и он по-прежнему не выполняет мою файловую структуру. Есть ли простой способ сделать это, или мне нужно будет создать новый репозиторий для каждой ветки и сделать там чек?
TL; DR Есть ли простой способ получить репозиторий и его ветви в виде папок с помощью LibGit2Sharp?
Вот мой код прямо сейчас с значениями по умолчанию.
public class GitActions
{
public string url = "";
public string RepoName = "test";
public string path = @"C:\temp\rooted\test2";
public string user = Properties.Settings.Default.User;
public string pass = Properties.Settings.Default.Password;
public Signature sig = new Signature("test", "test", new DateTimeOffset(2011, 06, 16, 10, 58, 27, TimeSpan.FromHours(2)));
public bool CloneRepo()
{
try
{
string clonedRepoPath = Repository.Clone(url, path, new CloneOptions()
{
CredentialsProvider = (_url, _user, _cred) => new UsernamePasswordCredentials
{
Username = user,
Password = pass,
}
});
Console.WriteLine("Clone Success");
return true;
}
catch (Exception ex)
{
Console.WriteLine("Clone Failure");
return false;
}
}
public bool PullRepo()
{
try
{
using (var repo = new Repository(path))
{
repo.Network.Pull(sig, new PullOptions()
{
FetchOptions = new FetchOptions()
{
CredentialsProvider = (_url, _user, _cred) => new UsernamePasswordCredentials
{
Username = user,
Password = pass,
}
},
MergeOptions = new MergeOptions()
});
Console.WriteLine("Pull Success");
}
return true;
}
catch (Exception ex)
{
Console.WriteLine("Pull Failure");
return false;
}
}
public bool SwitchBranch(string name)
{
try
{
using (var repo = new Repository(path))
{
repo.Checkout(repo.Branches[name], sig);
}
Console.WriteLine("Switch successful");
return true;
}
catch (Exception ex)
{
Console.WriteLine("Branch Switch Failed");
return false;
}
}
}
Что такое «теперь» переменная должна быть в декларации «branchFolderName»? – user3236668
Ох. Сожалею. Я забыл описать это. Это уникальный номер (тики), чтобы предотвратить перезапись предыдущей версии папок. – nulltoken