Le forchette Git sono effettivamente dei cloni?

Continuo a sentire che le persone dicono che stanno creando un codice in git. Git “fork” suona sospettosamente come git “clone” più una certa (insignificante) volontà psicologica di rinunciare alle future fusioni. Non c’è un comando fork in git, giusto?

Github rende le forche un po ‘più reali graffettandoci la corrispondenza. Cioè, si preme il pulsante della fork e in seguito, quando si preme il pulsante di richiesta di pull, il sistema è abbastanza intelligente da inviare via email al proprietario. Quindi, è un po ‘un ballo attorno alla proprietà e ai permessi del repository.

Si No? Qualche angoscia su Github che estende git in questa direzione? O qualche voce di git che assorbe la funzionalità?

Fork , nel contesto GitHub, non estende Git.
Permette solo cloni sul lato server.

Quando cloni un repository GitHub sulla stazione di lavoro locale, non puoi contribuire al repository upstream a meno che non sia esplicitamente dichiarato come “contributore”. Questo perché il tuo clone è un’istanza separata di quel progetto. Se vuoi contribuire al progetto, puoi utilizzare il biforcarsi per farlo, nel modo seguente:

  • clonare quel repository GitHub sul tuo account GitHub (cioè la parte “fork” , un clone sul lato server)
  • contribuisci a quel repository GitHub (è nel tuo account GitHub, quindi hai tutto il diritto di spingerlo)
  • segnala qualsiasi contributo interessante al repository GitHub originale (ovvero la parte “richiesta pull” tramite le modifiche apportate al proprio repository GitHub)

Controlla anche ” Collaborative GitHub Workflow “.

Se si desidera mantenere un collegamento con il repository originale (chiamato anche upstream), è necessario aggiungere un riferimento remoto al repository originale.
Vedi ” Qual è la differenza tra origine e upstream in github ”

forcella e monte

Continuo a sentire che le persone dicono che stanno creando un codice in git. Git “fork” suona sospettosamente come git “clone” più una certa (insignificante) volontà psicologica di rinunciare alle future fusioni. Non c’è un comando fork in git, giusto?

Penso che tu abbia un’idea divertente di cosa significa “biforcarsi”. È un concetto, non un comando specificamente supportato da qualsiasi sistema di controllo della versione.

Il tipo più semplice di biforcazione è sinonimo di ramificazione. Ogni volta che crei un ramo, indipendentemente dal tuo VCS, hai “forked”. Questi fork sono di solito abbastanza facili da unire insieme.

Il tipo di fork di cui parli, dove una parte separata prende una copia completa del codice e si allontana, necessariamente accade al di fuori del VCS in un sistema centralizzato come Subversion. Un VCS distribuito come Git ha un supporto molto migliore per la forking dell’intero codebase e l’avvio effettivo di un nuovo progetto.

Git (non GitHub) supporta nativamente “fork” di un intero repository (cioè, clonandolo) in un paio di modi:

  • quando cloni, viene creata per te una origin chiamata remota
  • per impostazione predefinita tutti i rami nel clone seguiranno i loro equivalenti di origin
  • il recupero e l’unione delle modifiche dal progetto originale da cui è stato eseguito il forking è banalmente semplice

Git rende le modifiche apportate alla sorgente della fork come semplici come chiedere a qualcuno dal progetto originale di prelevare da te o richiedere l’accesso in scrittura per spingerti indietro le modifiche. Questa è la parte che GitHub rende più facile e standardizza.

Qualche angoscia su Github che estende git in questa direzione? O qualche voce di git che assorbe la funzionalità?

Non c’è angoscia perché la tua ipotesi è sbagliata. GitHub “estende” la funzionalità di foratura di Git con una bella GUI e un metodo standardizzato per l’emissione di richieste pull, ma non aggiunge la funzionalità a Git. Il concetto di full-repo-forking è inciso direttamente nel controllo della versione distribuita a un livello fondamentale. Puoi abbandonare GitHub in qualsiasi momento e continuare a spingere / tirare i progetti che hai “biforcato”.

Sì Fork è un clone. È emerso perché non puoi spingere alle copie degli altri senza il loro permesso . Quello che fanno è farne una copia per te ( fork ), dove avrai anche il permesso di scrittura.

In futuro, se il proprietario effettivo o altri utenti con una forchetta come le tue modifiche, potranno tornare al proprio repository. In alternativa puoi inviare una “richiesta di pull”.

“Fork” in questo contesto significa “Fai una copia del loro codice in modo che io possa aggiungere le mie modifiche”. Non c’è molto altro da dire. Ogni clone è essenzialmente una forchetta, e dipende dall’originale decidere se estrarre i cambiamenti dalla fork.

La clonazione implica la creazione di una copia del repository git su una macchina locale, mentre la foratura è la clonazione del repository in un altro repository. La clonazione è solo per uso personale (anche se potrebbero verificarsi future fusioni), ma con il biforcarsi si sta copiando e si apre un nuovo ansible percorso del progetto

Penso che fork sia una copia di un altro repository ma con la modifica del tuo account. ad esempio, se cloni direttamente altri repository localmente, l’origine dell’object remoto sta ancora utilizzando l’account da cui cloni. Non puoi impegnarti e contribuire con il tuo codice. È solo una pura copia di codici. Altrimenti, se forzi un repository, clonerà il repository con l’aggiornamento delle impostazioni del tuo account nel tuo account github. E poi clonando il repository nel contesto del tuo account, puoi impegnare i tuoi codici.

Il forking è fatto quando decidi di contribuire ad alcuni progetti. Dovresti fare una copia dell’intero progetto insieme ai suoi log di cronologia. Questa copia è interamente creata nel repository e una volta apportate queste modifiche, si invia una richiesta di pull. Ora tocca al proprietario della sorgente accettare la richiesta di pull e incorporare le modifiche nel codice originale.

Git clone è un comando reale che consente agli utenti di ottenere una copia della fonte. git clone [URL] Questo dovrebbe creare una copia di [URL] nel tuo repository locale.

A parte il fatto che la clonazione è dal server alla tua macchina e la forking sta facendo una copia sul server stesso, una differenza importante è che quando cloniamo, otteniamo tutti i rami, le etichette, ecc. Ma quando forgiamo, in realtà solo ottenere i file correnti nel ramo principale, nient’altro che quello. Ciò significa che non otteniamo gli altri rami, ecc. Quindi, se devi unire qualcosa al repository originale, si tratta di un’unione tra diversi repo e sicuramente necessiteranno di privilegi più elevati.

Fork non è un comando in git, è solo un concetto che Github implementa. Ricorda che Git è stato progettato per funzionare in ambiente peer to peer senza la necessità di sincronizzare le cose con qualsiasi copia master. Il server è solo un altro peer ma lo consideriamo come una copia master.

C’è un equivoco qui rispetto a cosa sia una “forchetta”. Infatti, una fork non è altro che una serie di rami per utente. Quando si preme su un fork, si esegue il push del repository originale perché questo è l’unico repo.

Potete provare questo spingendo a un fork, notando il commit e poi andando al repository originale e usando l’ID commit, vedrete che il commit è “dentro” il repository originale.

Questo ha molto senso, ma è tutt’altro che ovvio (l’ho scoperto solo accidentalmente di recente).

Quando John forks esegue il repo su SuperProject, ciò che sembra effettivamente accadere è che tutti i rami nel repository di origine vengono replicati con un nome come “John.master” e “John.new_gui_project” ecc.

Github “nasconde” il “John”. da noi e ci dà l’illusione di avere la nostra “copia” del repository in Github, ma non ne abbiamo e nemmeno ne è necessario uno.

Quindi il “master” del ramo della mia fork è in realtà chiamato “Korporal.master” ma l’interfaccia utente di Github non lo rivela mai, mostrandomi solo “padrone”.

Questo è più o meno quello che penso possa succedere sotto il cofano, basandosi su cose che ho fatto di recente e quando lo mediti, è un ottimo design.

Per questo motivo penso che sarebbe molto facile per Microsoft implementare le forcelle Git nella loro offerta di servizi di Visual Studio Team.