Próbuję użyć libgit2sharp
, aby uzyskać poprzednią wersję pliku. Wolałabym, aby katalog roboczy pozostał taki, jaki jest, przynajmniej przywrócony do poprzedniego stanu.Jak uzyskać poprzednią wersję pliku z libgit2sharp
Moje początkowe podejście polegało na próbie przechowania, ścieżce do kasy na żądanym pliku, zapisaniu jej na zmiennej łańcuchowej, a następnie ukrywaniu popu. Czy istnieje sposób, aby ukryć pop? Nie mogę tego łatwo znaleźć. Oto kod, który mam do tej pory:
using (var repo = new Repository(DirectoryPath, null))
{
var currentCommit = repo.Head.Tip.Sha;
var commit = repo.Commits.Where(c => c.Sha == commitHash).FirstOrDefault();
if (commit == null)
return null;
var sn = "Stash Name";
var now = new DateTimeOffset(DateTime.Now);
var diffCount = repo.Diff.Compare().Count();
if(diffCount > 0)
repo.Stashes.Add(new Signature(sn, "[email protected]", now), options: StashModifiers.Default);
repo.CheckoutPaths(commit.Sha, new List<string>{ path }, CheckoutModifiers.None, null, null);
var fileText = File.ReadAllText(path);
repo.CheckoutPaths(currentCommit, new List<string>{path}, CheckoutModifiers.None, null, null);
if(diffCount > 0)
; // stash Pop?
}
Jeśli jest łatwiejsze podejście niż przy użyciu Stash, to również byłoby świetne.
Dzięki. Po prostu notatka dla kogoś innego: metoda 'Repository.CheckoutPaths' używana przez @nulltoken nie istnieje w wersji v.13. Ale jest zawarty w gałęzi vNext. Tak więc po wydaniu (lub jeśli używasz vAlpha), to będzie działać idealnie. Do tego czasu będziesz musiał ponownie napisać te połączenia, używając nieco innego podpisu. – Shlomo
Dziękuję również za pracę nad świetnym pakietem. Duża pomoc. – Shlomo
@Shlomo Wielkie dzięki! :) – nulltoken