Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menolak cawangan tertentu ke jauh menggunakan 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!
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")
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"}, })
Pertama, saya mendapat kandungan repositori daripada origin
err = remote.fetch(&git.fetchoptions{ remotename: "origin", tags: git.alltags, })
...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
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, })
git.noerralreadyuptodate
并且 mirror
远程上没有任何反应。
当将单个分支推送到远程时,refspec
不应采用 +refs/heads/localbranchname:refs/remotes/remotename/remotebranchname
Tetapi ini menghasilkan git.noerralreadyuptodate
dan tiada apa yang berlaku pada 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 stringTetapi sebagai 🎜
"+refs/heads/localbranchname:refs/heads/remotebranchname"🎜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, })
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!