使用 libgit2sharp 检查远程分支
Checking out remote branch using libgit2sharp
考虑以下因素,我在 github 上有两个分支:master 和 dev。我有一个本地存储库,它是远程主机的克隆并指向远程主机,但我想将它切换到开发分支,以便我所做的任何更改都将提交给开发而不是主机。需要哪些步骤才能做到这一点?我尝试了多种方法,但它们似乎从来没有奏效,而且它总是致力于掌握。请简单地解释一下,因为我还是 Git 和 libgit2sharp 的新手,所以我仍在努力思考它。
编辑:我正在使用 libgit2sharp 库发出 git 命令,而不是 Git shell
如果你的开发分支存在则:
git checkout dev
如果您的开发分支尚不存在,那么您需要创建它然后切换到它:
git checkout -b dev
使用 libgit2sharp,无法执行 git checkout -b
(据我所知),因此您需要使用 CreateBranch
创建分支,然后 Checkout
执行分支结帐。
代码如下所示:
private void GetOrCreateThenCheckoutBranch(string myPath, string branchName)
{
// NOTE: This code is for demo purposes only. It is a bad idea
// to create code that couples multiple functions/actions together
using (var repo = new Repository("path/to/your/repo"))
{
var devBranch = repo.Branches["dev"];
if (branch == null)
{
// Repository returns null object when branch does not exist
// so, create a new, LOCAL branch
repo.CreateBranch("dev"); // Or repo.Branches.Add("dev", "HEAD");
devBranch = repo.Branches["dev"];
// You will need more code _here_ if you want to synchronize/set
// an upstream branch...
}
// Now, checkout the branch
Branch currentBranch = Commands.Checkout(repo , devBranch);
// Do more stuff...
}
Git是分布式版本控制系统。当您进行更改时,您是在本地存储库副本中的分支中进行更改。在本地进行更改后,您将需要
- 在本地添加并提交更改(可能将它们推送到
远程存储库,如果您有同名的映射远程分支)
- 将更改合并回 master
- 将更改推送到远程主存储库(通常 origin/master)。
如果远程分支不允许任何人进行合并,您将需要发出 pull request。
如果您还没有名为 dev
的本地分支,但是您的远程 确实 有一个 dev
分支,那么 运行 git checkout dev
会在本地新建一个dev
分支,设置远程跟踪信息,然后切换到新建的分支。您可以在 LibGit2Sharp 中模拟此行为。
要创建跟踪远程 dev
分支 (refs/remotes/origin/dev
) 的本地分支 dev
,首先找到远程分支:
Branch trackedBranch = repo.Branches["origin/dev"];
然后创建一个名为 dev
的新本地分支,它指向与 origin/dev
分支相同的提交:
Branch localBranch = repo.CreateBranch("dev", trackedBranch.Tip);
然后设置本地和远程分支之间的跟踪:
repo.Branches.Update(localBranch, b => b.UpstreamBranch = "refs/heads/dev");
最后,切换到新分支:
LibGit2Sharp.Commands.Checkout(repo, "dev");
考虑以下因素,我在 github 上有两个分支:master 和 dev。我有一个本地存储库,它是远程主机的克隆并指向远程主机,但我想将它切换到开发分支,以便我所做的任何更改都将提交给开发而不是主机。需要哪些步骤才能做到这一点?我尝试了多种方法,但它们似乎从来没有奏效,而且它总是致力于掌握。请简单地解释一下,因为我还是 Git 和 libgit2sharp 的新手,所以我仍在努力思考它。
编辑:我正在使用 libgit2sharp 库发出 git 命令,而不是 Git shell
如果你的开发分支存在则:
git checkout dev
如果您的开发分支尚不存在,那么您需要创建它然后切换到它:
git checkout -b dev
使用 libgit2sharp,无法执行 git checkout -b
(据我所知),因此您需要使用 CreateBranch
创建分支,然后 Checkout
执行分支结帐。
代码如下所示:
private void GetOrCreateThenCheckoutBranch(string myPath, string branchName)
{
// NOTE: This code is for demo purposes only. It is a bad idea
// to create code that couples multiple functions/actions together
using (var repo = new Repository("path/to/your/repo"))
{
var devBranch = repo.Branches["dev"];
if (branch == null)
{
// Repository returns null object when branch does not exist
// so, create a new, LOCAL branch
repo.CreateBranch("dev"); // Or repo.Branches.Add("dev", "HEAD");
devBranch = repo.Branches["dev"];
// You will need more code _here_ if you want to synchronize/set
// an upstream branch...
}
// Now, checkout the branch
Branch currentBranch = Commands.Checkout(repo , devBranch);
// Do more stuff...
}
Git是分布式版本控制系统。当您进行更改时,您是在本地存储库副本中的分支中进行更改。在本地进行更改后,您将需要
- 在本地添加并提交更改(可能将它们推送到 远程存储库,如果您有同名的映射远程分支)
- 将更改合并回 master
- 将更改推送到远程主存储库(通常 origin/master)。
如果远程分支不允许任何人进行合并,您将需要发出 pull request。
如果您还没有名为 dev
的本地分支,但是您的远程 确实 有一个 dev
分支,那么 运行 git checkout dev
会在本地新建一个dev
分支,设置远程跟踪信息,然后切换到新建的分支。您可以在 LibGit2Sharp 中模拟此行为。
要创建跟踪远程 dev
分支 (refs/remotes/origin/dev
) 的本地分支 dev
,首先找到远程分支:
Branch trackedBranch = repo.Branches["origin/dev"];
然后创建一个名为 dev
的新本地分支,它指向与 origin/dev
分支相同的提交:
Branch localBranch = repo.CreateBranch("dev", trackedBranch.Tip);
然后设置本地和远程分支之间的跟踪:
repo.Branches.Update(localBranch, b => b.UpstreamBranch = "refs/heads/dev");
最后,切换到新分支:
LibGit2Sharp.Commands.Checkout(repo, "dev");