Как создать сиротскую ветвь в libgit2sharp?Сиротская ветвь в libgit2sharp
Все, что я мог найти, это методы, которые создают ветвь, которая указывает на фиксацию.
Я ищу эффект, аналогичную команду:
git checkout --orphan BRANCH_NAME
Как создать сиротскую ветвь в libgit2sharp?Сиротская ветвь в libgit2sharp
Все, что я мог найти, это методы, которые создают ветвь, которая указывает на фиксацию.
Я ищу эффект, аналогичную команду:
git checkout --orphan BRANCH_NAME
git checkout --orphan BRANCH_NAME
фактически перемещает HEAD
к нерожденным ветвям BRANCH_NAME
без изменения рабочего каталога, ни индекса.
Вы можете выполнить аналогичную операцию с LibGit2Sharp, обновив цель ссылки HEAD
с помощью метода repo.Refs.UpdateTarget()
.
Следующий тест демонстрирует это
[Fact]
public void CanCreateAnUnbornBranch()
{
string path = CloneStandardTestRepo();
using (var repo = new Repository(path))
{
// No branch named orphan
Assert.Null(repo.Branches["orphan"]);
// HEAD doesn't point to an unborn branch
Assert.False(repo.Info.IsHeadUnborn);
// Let's move the HEAD to this branch to be created
repo.Refs.UpdateTarget("HEAD", "refs/heads/orphan");
Assert.True(repo.Info.IsHeadUnborn);
// The branch still doesn't exist
Assert.Null(repo.Branches["orphan"]);
// Create a commit against HEAD
var signature = new Signature("Me", "[email protected]", DateTimeOffset.Now);
Commit c = repo.Commit("New initial root commit", signature, signature);
// Ensure this commit has no parent
Assert.Equal(0, c.Parents.Count());
// The branch now exists...
Branch orphan = repo.Branches["orphan"];
Assert.NotNull(orphan);
// ...and points to that newly created commit
Assert.Equal(c, orphan.Tip);
}
}