Heim > Artikel > Backend-Entwicklung > So verschieben Sie einen bestimmten Zweig mithilfe von Go-Git in die Ferne
php-Editor Strawberry zeigt Ihnen, wie Sie mit go-git einen bestimmten Zweig auf die Fernbedienung übertragen. go-git ist eine Open-Source-Bibliothek, die auf der Go-Sprache basiert und eine einfache Möglichkeit zum Betrieb von Git-Repositorys bietet. Durch das Pushen eines bestimmten Zweigs in ein Remote-Repository können Teammitglieder den neuesten Code teilen und die Codebasis auf dem neuesten Stand halten. In diesem Artikel stellen wir die Schritte zur Verwendung von go-git im Detail vor, damit Sie dieses praktische Tool schnell beherrschen können. Egal, ob Sie Git-Neuling oder ein erfahrener Entwickler sind, dieser Artikel bietet Ihnen hilfreiche Anleitungen. Lassen Sie uns lernen, wie Sie mit go-git einen bestimmten Zweig in das Remote-Repository verschieben!
Was ist die kanonische Methode, um mit go-git
eine bestimmte einzelne lokale Filiale an eine bestimmte Remote-Station zu verschieben?
Ich habe das lokale Repository ausgecheckt und mit go-git
repo, err := git.plainopen("my-repo")
Dieses Repository verfügt über eine Standard-origin
-Remote.
Ich versuche, den Inhalt dieses Repositorys mit einer anderen Fernbedienung zu synchronisieren mirror
, also habe ich die Fernbedienung hinzugefügt
repo.createremote(&config.remoteconfig{ name: "mirror", urls: []string{"[email protected]:foo/mirror.git"}, })
Zuerst erhalte ich den Repository-Inhalt von origin
err = remote.fetch(&git.fetchoptions{ remotename: "origin", tags: git.alltags, })
...und nutzen Sie remote.list()
, um alle interessanten Branchen und Tags zu entdecken
Der letzte Schritt besteht darin, den Zweig auf mirror
,同时根据映射重写分支名称。例如。 refs/remotes/origin/master
签出为 refs/heads/master
应作为 main
推送到 mirror
zu verschieben und gleichzeitig den Zweignamen entsprechend der Zuordnung neu zu schreiben. Zum Beispiel. refs/remotes/origin/master
ausgecheckt als refs/heads/master
sollte als main
auf die
refSpec := config.RefSpec(fmt.Sprintf( "+%s:refs/remotes/mirror/%s", localBranch.Name().String(), // map branch names, e.g. master -> main mapBranch(remoteBranch.Name().Short()), )) err = repo.Push(&git.PushOptions{ RemoteName: "mirror", Force: true, RefSpecs: []config.RefSpec{refSpec}, Atomic: true, })
git.noerralreadyuptodate
并且 mirror
远程上没有任何反应。
当将单个分支推送到远程时,refspec
不应采用 +refs/heads/localbranchname:refs/remotes/remotename/remotebranchname
Aber das führt zu git.noerralreadyuptodate
und auf der Fernbedienung passiert nichts.
refspec
nicht im Format +refs/heads/localbranchname:refs/remotes/remotename/remotebranchname
vorliegen. z.B. Hier:
// refspec is a mapping from local branches to remote references. ... // eg.: "+refs/heads/*:refs/remotes/origin/*" // // https://git-scm.com/book/en/v2/git-internals-the-refspec type refspec stringAber als 🎜
"+refs/heads/localbranchname:refs/heads/remotebranchname"🎜Im Gegenteil. Siehe 🎜Beispiel🎜: 🎜
refSpecStr := fmt.Sprintf( "+%s:refs/heads/%s", localBranch.Name().String(), mapBranch(remoteBranch.Name().Short()), ) refSpec := config.RefSpec(refSpecStr) log.Infof("Pushing %s", refSpec) err = repo.Push(&git.PushOptions{ RemoteName: "mirror", Force: true, RefSpecs: []config.RefSpec{refSpec}, Atomic: true, })
Das obige ist der detaillierte Inhalt vonSo verschieben Sie einen bestimmten Zweig mithilfe von Go-Git in die Ferne. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!