Github aggiunge un repository come fork da un clone esistente


21

Quindi ho un repository git che ho clonato da una sorgente upstream su ghithub. Ho apportato alcune modifiche ad esso (che sono senza commit e nel ramo principale). Quello che voglio fare è inserire le mie modifiche nella mia pagina github come un nuovo ramo e fare in modo che github lo veda ancora come fork.

È possibile? Sono abbastanza nuovo per Git e Github. La mia domanda aveva persino senso?

Il modo più semplice a cui riesco a pensare (che sono sicuro sia il modo più completo) è di fare il fork del repository su github. Clonalo localmente in un'altra directory. Aggiungi il repository di origine a monte. Crea un ramo in quel nuovo repository con fork. Copia le mie modifiche al codice a mano nel nuovo repository locale. E poi spingerlo di nuovo sul mio github.

È un caso d'uso comune che esiste un modo più semplice di farlo senza duplicare le directory?

Immagino che sto chiedendo qui invece di SO dato che sono su Linux usando la riga di comando git e le persone qui danno risposte migliori imo =]


Immagino che questo sia tecnicamente in argomento, ma potrebbe fare di meglio altrove, dal momento che sembra essere principalmente una domanda github
Michael Mrozek

Risposte:


22

Puoi fare tutto dal tuo repository esistente (non è necessario clonare il fork in un nuovo repository (locale), creare il tuo ramo, copiare i tuoi commit / cambiamenti, ecc.).

  1. Prepara i tuoi commit per essere pubblicati.

    Affina eventuali commit locali esistenti (ad es. Con git commit --amende / o git rebase --interactive).

    Esegui il commit di una qualsiasi delle modifiche non impegnate che desideri pubblicare (non sono sicuro che tu intendessi implicare di avere alcuni commit sul tuo master locale e alcune modifiche non confermate, o solo alcune modifiche non confermate; per inciso, le modifiche non confermate non sono "su un ramo ", sono rigorosamente nel tuo albero di lavoro).

    Rinomina il tuo ramo principale per dargli il nome che desideri per il tuo "nuovo ramo". Ciò non è strettamente necessario (è possibile eseguire il push da qualsiasi ramo a qualsiasi altro ramo), ma probabilmente ridurrà la confusione a lungo termine se il ramo locale e il ramo nel fork GitHub hanno lo stesso nome.

    git branch -m master my-feature
    
  2. Fork il repository GitHub a monte
    (ad es.) github.com:UpstreamOwner/repostory_name.gitCome
    (ad es github.com:YourUser/repository_name.git. ) .

    Questo viene fatto sul sito Web GitHub (o un "client" che utilizza le API GitHub), non sono coinvolti comandi Git locali.

  3. Nel repository locale (quello originariamente clonato dal repository GitHub upstream e presenta le modifiche nel proprio master ), aggiungere il repository fork come remoto:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Invia il tuo ramo al repository fork su GitHub.

    git push github my-feature
    
  5. Facoltativamente, rinominare i telecomandi in modo che il fork sia noto come "origine" e l'upstream come "upstream".

    git remote rename origin upstream
    git remote rename github origin
    

    Un motivo per rinominare i telecomandi sarebbe perché si desidera essere in grado di utilizzare git pushsenza specificare un repository (l'impostazione predefinita è "origine").


Ha funzionato alla perfezione, ma quando crei il telecomando github penso che manchi "https: //" nell'URL Github
jesjimher,

1
@jesjimher: Gli "URL" in questo post usano la "sintassi simile a scp" che usa SSH, non HTTP (S). Dovresti anche cambiare i due punti in una barra per usarli come URL HTTP (S) (supponendo che il server supporti entrambi senza ulteriori modifiche allo spazio dei nomi, cosa che GitHub fa).
Chris Johnsen,

Oops, hai ragione, Chris, avevo sbagliato a digitare il colon come una barra, e quindi non ha funzionato con me a meno che non avessi aggiunto "https". Scusate il rumore ...
jesjimher,

Nel passaggio 4, l'utilizzo -udell'opzione può fare in modo che il tuo ramo locale my-feature segua lo stesso ramo remoto origin/my-feature. Il comando è:git push -u github my-feature
YaOzI

È fantastico. L'unica cosa che dovevo cambiare era l'indirizzo github!
Tico,

0

C'è uno strumento: hub

hubè uno strumento da riga di comando che si avvolge gitper estenderlo con funzionalità e comandi extra che semplificano il lavoro con GitHub

Ora puoi:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.