2013-04-18 19 views
8

C'è un modo per inviare un commit a un repository git remoto, senza prima creare un clone locale di quel repository?Come aggiornare un file nel repository remoto, senza prima clonare quel repository?

Ho un URL valido per il repository remoto, conosco il percorso del file e tutto ciò che voglio fare è spingere una versione aggiornata del file sul master. Idealmente mi piacerebbe che funzionasse con qualsiasi URL di repo remoto valido, ma sarebbe comunque utile se funzionasse solo con URL git basati su https.

Immagino sia impossibile, dal momento che non sembra possibile nemmeno recuperare un singolo file senza clonazione nel caso generale, secondo la risposta How to "git show" on a remote repo?. Ma spero che ci sia una soluzione alternativa che utilizza alcuni dei comandi git di livello inferiore.

+1

Non pensate sia possibile, né dovrebbe davvero, perché dovreste modificare i file senza avere l'intero pronti contro termine in primo luogo? –

+1

Se il repository remoto è ospitato su [github] (http://github.com), è possibile modificare il file direttamente lì. Altrimenti non penso sia possibile. –

+1

@MadaraUchiha Perché? Perché a volte hai solo bisogno di apportare una piccola modifica ad un enorme repo, e costa un sacco di tempo per clonare il tutto. Nel mio caso, un'app di gestione deve aggiornare i metadati contenuti in centinaia di repository git, ma non vuole conservare copie locali di tutti loro solo per quello scopo. – algal

risposta

7

Impossibile. Ma dal momento che un potenziale impegno avrebbe solo bisogno di avere un singolo commit come genitore è possibile impiegare la cosiddetta "clonazione superficiale" e recuperare solo il commit di punta del ramo di cui si ha bisogno. Questo porterà solo una quantità minima di oggetti dal telecomando. Cercare l'opzione della riga di comando --depth di git clone.

+0

Caratteristica interessante! Le pagine man dicono: _non puoi clonare o recuperare da esso, ** né spingerlo da dentro o dentro ** _.Pertanto, anche se è possibile utilizzarlo per creare una patch e inviare la patch singolarmente, non ti sarà di grande aiuto nello spingere le modifiche automaticamente. – Shahbaz

+0

@Shahbaz Il manuale è in realtà sbagliato, puoi spingerlo da solo ... – poke

+0

@poke, non l'ho provato, ma se sei sicuro, considera l'archiviazione di un bug report nella pagina di manuale. – Shahbaz

3

No, non penso sia possibile. È necessario clonare l'intero repository affinché funzioni. Git deve conoscere tutti i file e .git per eseguire correttamente il suo lavoro. Questo è il motivo per cui non puoi semplicemente spingere file arbitrari come quello.

1

@algal, per il vostro caso d'uso particolare, è possibile essere in grado di utilizzare un sottomodulo (http://git-scm.com/docs/git-submodule). Potresti clonare e impegnarti nel sottomodulo, senza clonare il "supermodulo" che potrebbe contenere il codice "massiccio" che hai menzionato. Il supermodulo potrebbe fare riferimento al sottomodulo per le informazioni di configurazione che hai citato.

0

sì, si può spingere una nuova versione utilizzando tagging

seguire questa procedura

nel nuovo principale del progetto

  1. git init
  2. git remote add origin [email protected]:yourusername/yourpoject
  3. git tag -a v2.0 -m 'version 2.0'
  4. git add .
  5. git commit -m "New Version 2.0 :rocket:"
  6. git push -u origin v2.0

ora avete una nuova filiale denominata v2.0 con il nuovo progetto e il vostro branch master rimane intatta. Dopodiché, se non lo sei, puoi cambiare il tuo ramo predefinito nelle impostazioni del tuo progetto github.

Problemi correlati