Suponga que tiene un repositorio en github.com/someone/repo
y lo bifurca a github.com/you/repo
. Quieres usar tu fork en lugar del repositorio principal, entonces haces un
go get github.com/you/repo
Ahora todas las rutas de importación en este repositorio estarán "rotas", lo que significa que si hay varios paquetes en el repositorio que hacen referencia entre sí a través de URL absolutas, harán referencia a la fuente, no a la bifurcación.
¿Existe una mejor manera de clonarlo manualmente en la ruta correcta?
git clone git@github.com:you/repo.git $GOPATH/src/github.com/someone/repo
ec2
paquete, tiene unalaunchpad.net/goamz/aws
importación. Tantoaws
losec2
paquetes como los residen en el MISMO repositorio, por lo que cuando se bifurcan, no harán referencia al paquete correcto (el que está en la bifurcación).Respuestas:
Para manejar solicitudes de extracción
github.com/someone/repo
paragithub.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
Para usar un paquete en su proyecto
https://github.com/golang/go/wiki/PackageManagementTools
fuente
git remote add
? clon de fork? clonar del original? desde dentro ir?Si está utilizando módulos go . Podrías usar
replace
directivaEntonces podría hacerlo a continuación en su archivo go.mod
dónde
v3.2.1
está la etiqueta en su repositorio. También se puede hacer a través de CLIfuente
go mod edit -replace
directamente en la línea de comandos:go mod edit -replace="github.com/someone/[email protected]=github.com/you/[email protected]"
. Ambos@v...
son opcionales.go.mod.local
ogo.mod.dev
cuyo rol es realmente reemplazar el camino de importación para el desarrollo local? Quiero decir, nunca te olvidarías de quitar el feo "reemplazo" porque no tendrías que hacerlo.Una forma de resolverlo es la sugerida por Ivan Rave y http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html - la forma de bifurcación.
Otro es solucionar el comportamiento de golang . Cuando usted
go get
, golang coloca sus directorios con el mismo nombre que en el URI del repositorio, y aquí es donde comienza el problema.Si, en cambio, emite el suyo propio
git clone
, puede clonar su repositorio en su sistema de archivos en una ruta con el nombre del repositorio original.Suponiendo que el repositorio original está dentro
github.com/awsome-org/tool
y lo bifurcagithub.com/awesome-you/tool
, puedes:golang está perfectamente feliz de continuar con este repositorio y en realidad no le importa que algún directorio superior tenga el nombre,
awesome-org
mientras que el git remote lo esawesome-you
. Todas las importacionesawesome-org
se resuelven a través del directorio que acaba de crear, que es su conjunto de trabajo local.Más detalladamente , consulte la publicación de mi blog: Bifurcación de repositorios de Golang en GitHub y administración de la ruta de importación
editar : ruta de directorio fija
fuente
Si su bifurcación es solo temporal (es decir, tiene la intención de fusionarlo), simplemente haga su desarrollo in situ, por ejemplo, en
$GOPATH/src/launchpad.net/goamz
.A continuación, utiliza las funciones del sistema de control de versiones (p. Ej.
git remote
) para hacer que el repositorio ascendente sea su repositorio en lugar del original.Hace que sea más difícil para otras personas usar su repositorio con
go get
pero es mucho más fácil integrarlo en sentido ascendente.De hecho, tengo un repositorio de goamz en el
lp:~nick-craig-wood/goamz/goamz
que desarrollo exactamente de esa manera. ¡Quizás el autor lo combine algún día!fuente
go get
desde mi repositorio, todas mis declaraciones de importación y demás se reflejarángithub.com/original_author
y, por lo tanto, se romperán ... ¿correcto?Aquí hay una forma de que funcione para todos:
Use github para bifurcar a "mi / repositorio" (solo un ejemplo):
Repita cada vez que mejore el código:
¿Por qué? Esto le permite tener su repositorio con el que cualquiera
go get
funciona. También le permite mantener y mejorar una rama que es buena para una solicitud de extracción. No hincha git con "proveedor", conserva el historial y las herramientas de compilación pueden darle sentido.fuente
La respuesta a esto es que si bifurca un repositorio con varios paquetes, deberá cambiar el nombre de todas las rutas de importación relevantes. Esto es en gran parte algo bueno ya que ha bifurcado todos esos paquetes y las rutas de importación deberían reflejar esto.
fuente
find
,xargs
ysed
, pero ayudaría a tener un flujo de trabajo sin dolor que trabaja constantemente para todo el mundo.gomvpkg
puede hacer los cambios de nombre más fácil / mejor.go get golang.org/x/tools/cmd/gomvpkg
entoncesgomvpkg -help
.Para automatizar este proceso, escribí un pequeño script. Puedes encontrar más detalles en mi blog para agregar un comando como "gofork" a tu bash.
fuente
golang
cambiarse agofork
en la línea 4?Utilice proveedores y submódulos juntos
import
declaraciones en su código fuente para que apunten a la carpeta del proveedor (sin incluir elvendor/
prefijo). Por ejemplovendor/bob/lib
=>import "bob/lib"
P.ej
Por qué
Esto resuelve todos los problemas de los que he oído hablar y con los que me he encontrado al tratar de resolverlo yo mismo.
Más información
fuente
en su
Gopkg.toml
archivo agregue estos bloques a continuaciónEntonces usará el bifurcado
project2
en lugar degithub.com/globalsign/mgo
fuente
Gopkg.toml
archivo solo se usa cuandodep
esta pregunta no menciona en absoluto. Los nuevos proyectos de Go deberían usar módulos Go en su lugar (y los proyectos existentes basados en dep de la OMI también deberían migrar).Puede usar el comando
go get -f
para obtener un repositorio bifurcadofuente