Importare un progetto git esistente in GitLab?


147

Ho un account di un'installazione di Gitlab in cui ho creato il repository "ffki-starteite"

Ora voglio clonare il repository git://freifunk.in-kiel.de/ffki-startseite.gitin quel repository con tutti i commit e i rami, così posso iniziare a lavorarci nel mio ambito.

Come posso importarlo?


3
Una nuova funzionalità di gitlab, crea progetto e poi vai alla pagina del progetto. Qui vedrai le istruzioni di base.
Martijn van Wezel,

Possibile duplicato del mirroring del repository Gitlab
Kelvin il

Le istruzioni di base sono sparite nelle versioni più recenti di Gitlab, qualcuno che le avesse copiate le avrebbe copiate qui?
jdevora,

Risposte:


156

Sono stato in grado di esportare completamente il mio progetto insieme a tutti gli commit, i rami e i tag su gitlab tramite i seguenti comandi eseguiti localmente sul mio computer:

Per illustrare il mio esempio, userò https://github.com/raveren/kint come repository dei sorgenti che voglio importare in gitlab. Ho creato un progetto vuoto chiamato Kint(sotto lo spazio dei nomi raveren) in gitlab in anticipo e mi ha detto che l' URL http git del progetto appena creato c'è http://gitlab.example.com/raveren/kint.git

I comandi sono indipendenti dal sistema operativo.

In una nuova directory:

git clone --mirror https://github.com/raveren/kint
cd kint.git
git remote add gitlab http://gitlab.example.com/raveren/kint.git
git push gitlab --mirror

Ora se si dispone di un repository clonato localmente che si desidera continuare a utilizzare con il nuovo telecomando, eseguire i seguenti comandi * lì:

git remote remove origin
git remote add origin http://gitlab.example.com/raveren/kint.git
git fetch --all

* Ciò presuppone che tu non abbia rinominato il tuo master remoto da origin, altrimenti, hai cambiato le prime due righe per rifletterlo.


1
Mi dà l'errore: remote: GitLab: Non sei autorizzato a forzare il codice push in un ramo protetto su questo progetto. A 10.0.100.89:8496/project/james-project.git ! [telecomando rifiutato] master -> master (hook di pre-ricezione rifiutato)
James Hirschorn,

4
Ho dovuto disattivare i rami protetti in Impostazioni -> Repository per farlo funzionare.
James Hirschorn,

Vedi la mia domanda perché dovresti usare --mirror
Martijn van Wezel il

108

Aggiungi il nuovo telecomando gitlab al tuo repository esistente e invia:

git remote add gitlab url-to-gitlab-repo
git push gitlab master

Ho dovuto spingere con forza, perché io giocherellava attorno a gitLab già: git push gitlab master -f. Ora ho l'intero repository con tutti gli commit nel mio nuovo GitLab;) grazie
rubo77

19
Non avresti bisogno di fare uno specchio? E se avessi altre filiali oltre al maestro?
Slhck,

7
sì, facendo come suggerisce OP, perdi tutti i rami (tranne il master) e i tag
raveren,

L'importazione del progetto Gitlab caricherà il repository remoto da un URL quando si crea il progetto. Include istruzioni per l'importazione di repository svn.
rickfoosusa,

1
git remote aggiungi gitlab url-to-gitlab-repo git push gitlab master --mirror
Saurabh

23

Per mantenere TUTTI I TAG EI FILIALI

Basta semplicemente eseguire questo comando in un existing Git repository

cd existing_repo
git remote rename origin previous-hosts
git remote add gitlab git@git.hutber.com:hutber/kindred.com.git
git push -u gitlab --all
git push -u gitlab --tags

Non copiare tutti i rami
Martijn van Wezel,

19

Ecco i passaggi forniti da Gitlab:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.example.com/rmishra/demoapp.git
git push -u origin --all
git push -u origin --tags

Questo spingerà solo il maestro e non altri rami
allkenang

18

Questa è una mossa di base di un repository in una nuova posizione. Uso questa sequenza per tutto il tempo. Con --bare non verrà visualizzato alcun file sorgente.

Apri Git Bash.
Crea un clone nudo del repository.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push nel nuovo repository.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

Rimuovere il repository locale temporaneo creato nel passaggio 1.

cd ../
rm -rf old-repository.git

Perché specchio? Vedi la documentazione di git: https://git-scm.com/docs/git-push

--all Spinge tutti i rami (es. ref sotto refs / heads /); non può essere utilizzato con altri.

--mirror Invece di nominare ogni ref da inviare, specifica che tutti i ref in refs / (che include ma non è limitato a refs / heads /, refs / remotes / e refs / tags /) devono essere specchiati nel repository remoto. I riferimenti locali appena creati verranno spinti all'estremità remota, i riferimenti aggiornati localmente verranno forzati sull'estremità remota e i riferimenti eliminati verranno rimossi dall'estremità remota. Questo è il valore predefinito se è impostata l'opzione di configurazione remote..mirror.


Funziona anche con gitlab!
asciugamano

12

rake gitlab: import: i repository potrebbero essere un metodo più adatto per l'importazione di massa:

  • copia il repository nudo in repos_path( /home/git/repositories/group/repo.git). Il nome della directory deve terminare .gite trovarsi in un gruppo o in uno spazio dei nomi utente.
  • correre bundle exec rake gitlab:import:repos

Il proprietario sarà il primo amministratore e un gruppo verrà creato se non già esistente.

Vedi anche: Come importare un repository bare git esistente in Gitlab?


Per coloro che possono essere confusi, il repository nudo è il repository solitamente in posizione nella posizione centralizzata (ad es. Github) che NON contiene la cartella .git nella radice del repository. Questa è un'opzione conveniente solo se si ha accesso al server in cui è archiviato il repository nudo. Altrimenti la risposta di @Raveren è l'opzione migliore.
TinkerTenorSoftwareAcquista il

4
git clone --mirror git@github.com:username/repo-name.git

git remote add gitlab ssh://git@servername.com/username/repo.git

git push -f --tags gitlab refs/heads/*:refs/heads/*

È meglio farlo su ssh, l'https potrebbe non funzionare


"l'https potrebbe non funzionare" normalmente non è così
Martijn van Wezel,

Questa è una cosa in realtà poiché le connessioni HTTP potrebbero essere disabilitate. Grazie per la risposta.
Michea l'

2

Spostamento di un progetto da GitHub a GitLab compresi problemi, richieste di pull Wiki, pietre miliari, etichette, note di rilascio e commenti

Esistono istruzioni dettagliate su GitLab Docs:

https://docs.gitlab.com/ee/user/project/import/github.html

tl; dr

  • Assicurati che tutti gli utenti GitHub che desideri mappare agli utenti GitLab abbiano:

    • Un account GitLab che ha effettuato l'accesso utilizzando l'icona GitHub - oppure -
    • Un account GitLab con un indirizzo e-mail che corrisponde all'indirizzo e-mail pubblico dell'utente GitHub
  • Dalla barra di navigazione in alto, fai clic su + e seleziona Nuovo progetto.

  • Seleziona la scheda Importa progetto, quindi seleziona GitHub.
  • Seleziona il primo pulsante per elencare i tuoi repository GitHub. Si viene reindirizzati a una pagina su github.com per autorizzare l'applicazione GitLab.
  • Fai clic su Autorizza gitlabhq. Si viene reindirizzati alla pagina di importazione di GitLab e tutti i repository GitHub sono elencati.
  • Continua a selezionare quali repository importare.

Ma per favore leggi la pagina di GitLab Documenti per dettagli e hook!

(non è molto)


1

Gitlab è un po 'infastidito da questa funzione. Puoi perdere molto tempo durante la risoluzione dei problemi soprattutto se il tuo progetto è grande.

La soluzione migliore sarebbe utilizzare lo strumento di creazione / importazione, non dimenticare di inserire il nome utente e la password, altrimenti non importa nulla.

Segui i miei screenshot

inserisci qui la descrizione dell'immagine

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.