Bagaimana untuk menolak cawangan tertentu ke jauh menggunakan go-git

WBOY
Lepaskan: 2024-02-09 09:12:20
ke hadapan
962 orang telah melayarinya

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

editor php Strawberry akan memperkenalkan anda cara menggunakan go-git untuk menolak cawangan tertentu ke alat kawalan jauh. go-git ialah perpustakaan sumber terbuka berdasarkan bahasa Go yang menyediakan cara mudah untuk mengendalikan repositori Git. Menolak cawangan tertentu ke repositori jauh membolehkan ahli pasukan berkongsi kod terkini dan memastikan pangkalan kod dikemas kini. Dalam artikel ini, kami akan memperkenalkan langkah menggunakan go-git secara terperinci untuk membantu anda menguasai alat praktikal ini dengan cepat. Sama ada anda baru menggunakan Git atau pembangun berpengalaman, artikel ini akan memberi anda panduan yang berguna. Mari belajar cara menggunakan go-git untuk menolak cawangan tertentu ke repositori jauh!

Kandungan soalan

Apakah cara berkanun untuk menolak cawangan tempatan tunggal tertentu ke alat kawalan jauh tertentu menggunakan go-git?

Saya mendaftar keluar dan membuka repositori tempatan menggunakan go-git

repo, err := git.plainopen("my-repo")
Salin selepas log masuk

Repositori ini mempunyai origin alat kawalan jauh lalai.

Saya cuba menyegerakkan kandungan repositori ini ke alat kawalan jauh yang lain mirror, jadi saya menambah alat kawalan jauh

repo.createremote(&config.remoteconfig{
                name: "mirror",
                urls: []string{"[email protected]:foo/mirror.git"},
            })
Salin selepas log masuk

Pertama, saya mendapat kandungan repositori daripada origin

err = remote.fetch(&git.fetchoptions{
                remotename: "origin",
                tags:       git.alltags,
            })
Salin selepas log masuk

...dan gunakan remote.list() untuk menemui semua cawangan dan tag yang menarik

Langkah terakhir ialah menolak cawangan ke mirror,同时根据映射重写分支名称。例如。 refs/remotes/origin/master 签出为 refs/heads/master 应作为 main 推送到 mirror sambil menulis semula nama cawangan mengikut pemetaan. Contohnya. refs/remotes/origin/master ditandakan keluar kerana refs/heads/master harus ditolak ke

remote sebagai utama. Jadi saya mengulangi dahan dan cuba menolaknya satu demi satu:

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,
            })
Salin selepas log masuk
git.noerralreadyuptodate 并且 mirror 远程上没有任何反应。

解决方法

当将单个分支推送到远程时,refspec 不应采用 +refs/heads/localbranchname:refs/remotes/remotename/remotebranchnameTetapi ini menghasilkan git.noerralreadyuptodate dan tiada apa yang berlaku pada alat kawalan jauh.

Penyelesaian

Apabila menolak satu cawangan ke alat kawalan jauh, refspec seharusnya tidak berada dalam format +refs/heads/localbranchname:refs/remotes/remotename/remotebranchname, cth.

Di sini:

// 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
Salin selepas log masuk

Tetapi sebagai 🎜
"+refs/heads/localbranchname:refs/heads/remotebranchname"
Salin selepas log masuk
🎜Sebaliknya. Lihat 🎜Contoh🎜: 🎜
    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,
    })
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menolak cawangan tertentu ke jauh menggunakan go-git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!