Heim > Backend-Entwicklung > Golang > So verschieben Sie einen bestimmten Zweig mithilfe von Go-Git in die Ferne

So verschieben Sie einen bestimmten Zweig mithilfe von Go-Git in die Ferne

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2024-02-09 09:12:20
nach vorne
1038 Leute haben es durchsucht

如何使用 go-git 将特定分支推送到远程

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!

Frageninhalt

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

geöffnet
repo, err := git.plainopen("my-repo")
Nach dem Login kopieren

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"},
            })
Nach dem Login kopieren

Zuerst erhalte ich den Repository-Inhalt von origin

err = remote.fetch(&git.fetchoptions{
                remotename: "origin",
                tags:       git.alltags,
            })
Nach dem Login kopieren

...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

Fernbedienung übertragen werden. Also iteriere ich die Zweige und versuche, sie einen nach dem anderen voranzutreiben:

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,
            })
Nach dem Login kopieren
git.noerralreadyuptodate 并且 mirror 远程上没有任何反应。

解决方法

当将单个分支推送到远程时,refspec 不应采用 +refs/heads/localbranchname:refs/remotes/remotename/remotebranchnameAber das führt zu git.noerralreadyuptodate und auf der Fernbedienung passiert nichts.

Problemumgehung

Beim Pushen eines einzelnen Zweigs an eine Fernbedienung sollte 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 string
Nach dem Login kopieren

Aber als 🎜
"+refs/heads/localbranchname:refs/heads/remotebranchname"
Nach dem Login kopieren
🎜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,
    })
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage