Supposons que vous ayez un référentiel sur github.com/someone/repo
et que vous le fassiez github.com/you/repo
. Vous voulez utiliser votre fork au lieu du repo principal, vous faites donc un
go get github.com/you/repo
Désormais, tous les chemins d'importation de ce référentiel seront "cassés", ce qui signifie que s'il y a plusieurs packages dans le référentiel qui se référencent via des URL absolues, ils référenceront la source, pas le fork.
Existe-t-il un meilleur moyen de le cloner manuellement dans le bon chemin?
git clone git@github.com:you/repo.git $GOPATH/src/github.com/someone/repo
ec2
paquet - il a unelaunchpad.net/goamz/aws
importation. Les packagesaws
et lesec2
packages résident dans le même référentiel, donc lorsqu'ils sont forkés, ils ne référenceront pas le package correct (celui du fork).Réponses:
Pour gérer les demandes d'extraction
github.com/someone/repo
versgithub.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
Pour utiliser un package dans votre projet
https://github.com/golang/go/wiki/PackageManagementTools
la source
git remote add
? cloner de la fourche? cloner de l'original? de l'intérieur aller?Si vous utilisez des modules go . Vous pouvez utiliser la
replace
directiveVous pouvez donc faire ci-dessous dans votre fichier go.mod
où
v3.2.1
est la balise sur votre repo. Peut également être fait via CLIla source
go mod edit -replace
directement sur la ligne de commande:go mod edit -replace="github.com/someone/[email protected]=github.com/you/[email protected]"
. Les deux@v...
sont facultatifs.go.mod.local
ougo.mod.dev
dont le rôle est de remplacer réellement la voie de l'importation pour le développement local? Je veux dire, vous n'oublierez jamais de supprimer le vilain "remplacer" parce que vous n'auriez pas à le faire.Une façon de résoudre ce problème est celle suggérée par Ivan Rave et http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html - la manière de bifurquer.
Une autre solution consiste à contourner le comportement du golang . Lorsque vous
go get
, golang dispose vos répertoires sous le même nom que dans l'URI du référentiel, et c'est là que le problème commence.Si, à la place, vous émettez le vôtre
git clone
, vous pouvez cloner votre référentiel sur votre système de fichiers sur un chemin nommé d'après le référentiel d'origine.En supposant que le référentiel d'origine se trouve
github.com/awsome-org/tool
et que vous le chargezgithub.com/awesome-you/tool
, vous pouvez:golang est parfaitement heureux de continuer avec ce dépôt et ne se soucie pas vraiment que certains répertoires supérieurs portent le nom
awesome-org
alors que git remote l'estawesome-you
. Toutes les importations pourawesome-org
sont résolues via le répertoire que vous venez de créer, qui est votre ensemble de travail local.Plus longuement, veuillez consulter mon article de blog: Forking Golang repositories sur GitHub et gérer le chemin d'importation
edit : chemin de répertoire fixe
la source
Si votre fork n'est que temporaire (c'est-à-dire que vous avez l'intention de le fusionner), faites simplement votre développement in situ, par exemple dans
$GOPATH/src/launchpad.net/goamz
.Vous utilisez ensuite les fonctionnalités du système de contrôle de version (par exemple
git remote
) pour faire du référentiel amont votre référentiel plutôt que celui d'origine.Il est plus difficile pour d'autres personnes d'utiliser votre référentiel avec
go get
mais beaucoup plus facile pour son intégration en amont.En fait, j'ai un référentiel pour goamz pour
lp:~nick-craig-wood/goamz/goamz
lequel je développe exactement de cette manière. Peut-être que l'auteur le fusionnera un jour!la source
go get
de mon dépôt, toutes mes déclarations d'importation et autres refléteront toujoursgithub.com/original_author
et seront donc cassées ... correct?Voici un moyen qui fonctionne pour tout le monde:
Utilisez github pour accéder à "my / repo" (juste un exemple):
Répétez chaque fois que vous améliorez le code:
Pourquoi? Cela vous permet d'avoir votre repo avec lequel tout
go get
fonctionne. Il vous permet également de maintenir et d'améliorer une branche qui convient à une pull request. Il ne gonfle pas git avec "vendeur", il préserve l'historique, et les outils de construction peuvent en donner un sens.la source
La réponse à cela est que si vous créez un dépôt avec plusieurs packages, vous devrez renommer tous les chemins d'importation appropriés. C'est en grande partie une bonne chose car vous avez forké tous ces packages et les chemins d'importation devraient refléter cela.
la source
find
,xargs
etsed
, mais il serait utile d'avoir un flux de travail sans douleur qui fonctionne de manière cohérente pour tout le monde.gomvpkg
peut faire les changements de noms plus facilement / mieux.go get golang.org/x/tools/cmd/gomvpkg
alorsgomvpkg -help
.Pour automatiser ce processus, j'ai écrit un petit script. Vous pouvez trouver plus de détails sur mon blog pour ajouter une commande comme "gofork" à votre bash.
la source
golang
être changégofork
en ligne 4?Utiliser ensemble la vente et les sous-modules
import
déclarations dans votre code source pour qu'elles pointent vers le dossier du fournisseur (sans levendor/
préfixe). Par exemplevendor/bob/lib
=>import "bob/lib"
Par exemple
Pourquoi
Cela résout tous les problèmes dont j'ai entendu parler et que j'ai rencontré en essayant de comprendre cela moi-même.
Plus d'informations
la source
dans votre
Gopkg.toml
fichier, ajoutez ces blocs ci-dessousDonc, il utilisera le fourchu
project2
à la place degithub.com/globalsign/mgo
la source
Gopkg.toml
fichier n'est utilisé que pourdep
lequel cette question ne mentionne pas du tout. Les nouveaux projets Go devraient utiliser des modules Go à la place (et les projets basés sur les dépôts existants de l'OMI devraient également migrer).Vous pouvez utiliser la commande
go get -f
pour obtenir un dépôt fourchula source