Misalkan Anda memiliki repositori di github.com/someone/repo
dan Anda mem-forknya github.com/you/repo
. Anda ingin menggunakan garpu alih-alih repo utama, jadi Anda melakukan a
go get github.com/you/repo
Sekarang semua jalur impor di repo ini akan "rusak", artinya, jika ada beberapa paket di repositori yang mereferensikan satu sama lain melalui URL absolut, mereka akan mereferensikan sumbernya, bukan garpu.
Apakah ada cara yang lebih baik seperti mengkloningnya secara manual ke jalur yang benar?
git clone git@github.com:you/repo.git $GOPATH/src/github.com/someone/repo
ec2
paket - adalaunchpad.net/goamz/aws
impor. Keduanya,aws
danec2
paket berada di repositori yang SAMA, jadi ketika bercabang, tidak akan mereferensikan paket yang benar (yang ada di percabangan).Jawaban:
Untuk menangani permintaan tarik
github.com/someone/repo
kegithub.com/you/repo
go get github.com/someone/repo
cd "$(go env GOPATH)/src"/github.com/someone/repo
git remote add myfork https://github.com/you/repo.git
git push myfork
http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html
Untuk menggunakan paket dalam proyek Anda
https://github.com/golang/go/wiki/PackageManagementTools
sumber
git remote add
? klon dari garpu? klon dari aslinya? dari dalam pergi?Jika Anda menggunakan modul go . Anda bisa menggunakan
replace
direktifJadi Anda bisa melakukannya di bawah ini di file go.mod Anda
di mana
v3.2.1
tag di repo Anda. Juga bisa dilakukan melalui CLIsumber
go mod edit -replace
langsung pada baris perintah:go mod edit -replace="github.com/someone/[email protected]=github.com/you/[email protected]"
. Keduanya@v...
opsional.go.mod.local
ataugo.mod.dev
peran siapa yang benar-benar menggantikan jalur impor untuk pembangunan lokal? Maksud saya, Anda tidak akan pernah lupa untuk menghapus "ganti" yang jelek karena Anda tidak perlu melakukannya.Salah satu cara untuk mengatasinya adalah yang disarankan oleh Ivan Rave dan http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html - cara bercabang.
Cara lainnya adalah mengatasi perilaku golang . Saat Anda
go get
, golang meletakkan direktori Anda dengan nama yang sama seperti di URI repositori, dan di sinilah masalahnya dimulai.Jika, sebaliknya, Anda menerbitkan sendiri
git clone
, Anda bisa mengkloning repositori Anda ke sistem file Anda pada jalur yang dinamai sesuai repositori asli.Dengan asumsi repositori asli ada
github.com/awsome-org/tool
dan Anda meminjamkannyagithub.com/awesome-you/tool
, Anda dapat:golang sangat senang untuk melanjutkan repositori ini dan tidak peduli beberapa direktori atas memiliki nama
awesome-org
sementara git remote adalahawesome-you
. Semua impor untukawesome-org
disimpan kembali melalui direktori yang baru saja Anda buat, yang merupakan set kerja lokal Anda.Lebih lanjut, silakan lihat posting blog saya: Memotong repositori Golang di GitHub dan mengelola jalur impor
edit : jalur direktori tetap
sumber
Jika garpu Anda hanya sementara (yaitu Anda bermaksud untuk menggabungkannya) maka lakukan saja pengembangan Anda di situ, misalnya di
$GOPATH/src/launchpad.net/goamz
.Anda kemudian menggunakan fitur sistem kontrol versi (misalnya
git remote
) untuk menjadikan repositori upstream sebagai repositori Anda, bukan yang asli.Ini mempersulit orang lain untuk menggunakan repositori Anda,
go get
tetapi lebih mudah untuk diintegrasikan ke upstream.Sebenarnya saya memiliki gudang untuk goamz di
lp:~nick-craig-wood/goamz/goamz
mana saya mengembangkannya dengan cara yang persis seperti itu. Mungkin penulis akan menggabungkannya suatu hari nanti!sumber
go get
dari repo saya, semua pernyataan impor saya dan semacamnya akan tetap mencerminkangithub.com/original_author
dan dengan demikian akan rusak ... benar?Inilah cara yang berhasil untuk semua orang:
Gunakan github untuk bercabang ke "my / repo" (hanya sebagai contoh):
Ulangi setiap kali Anda membuat kode lebih baik:
Mengapa? Ini memungkinkan Anda memiliki repo yang
go get
berfungsi dengan apa pun . Ini juga memungkinkan Anda memelihara & meningkatkan cabang yang bagus untuk permintaan tarik. Itu tidak membengkak dengan "vendor", itu mempertahankan sejarah, dan membangun alat dapat memahaminya.sumber
Jawabannya adalah jika Anda membagi repo dengan beberapa paket, Anda perlu mengganti nama semua jalur impor yang relevan. Ini sebagian besar merupakan hal yang baik karena Anda telah melakukan fork semua paket itu dan jalur impor harus mencerminkan ini.
sumber
find
,xargs
dansed
, tetapi akan membantu untuk memiliki alur kerja bebas rasa sakit yang secara konsisten bekerja untuk semua orang.gomvpkg
dapat melakukan penggantian nama dengan lebih mudah / lebih baik.go get golang.org/x/tools/cmd/gomvpkg
lalugomvpkg -help
.Untuk mengotomatiskan proses ini, saya menulis skrip kecil. Anda dapat menemukan detail selengkapnya di blog saya untuk menambahkan perintah seperti "gofork" ke bash Anda.
sumber
golang
diubah menjadigofork
baris 4?Gunakan vending dan submodul bersama-sama
import
pernyataan Anda di kode sumber agar mengarah ke folder vendor, (tidak termasukvendor/
awalan). Misalnyavendor/bob/lib
=>import "bob/lib"
Misalnya
Mengapa
Ini memecahkan semua masalah yang saya dengar dan temui saat mencoba mencari tahu sendiri.
Info lebih lanjut
sumber
di
Gopkg.toml
file Anda tambahkan blok ini di bawahJadi itu akan menggunakan bercabang
project2
sebagai penggantigithub.com/globalsign/mgo
sumber
Gopkg.toml
file hanya digunakan olehdep
yang pertanyaan ini tidak menyebutkan sama sekali. Proyek Go baru harus menggunakan modul Go sebagai gantinya (dan proyek berbasis dep IMO yang ada juga harus bermigrasi).Anda dapat menggunakan perintah
go get -f
untuk memberi Anda repo bercabangsumber