2015-03-31 14 views
64

Attualmente ho un repository privato su github che voglio rendere pubblico. Tuttavia alcuni dei primi commit contengono informazioni che non voglio rendere pubbliche (crittografia hardcoded, ecc.).Copia un repository git senza cronologia

Qual è il percorso più semplice per rendere pubblico l'ultimo commit (non ho davvero bisogno o non voglio i commit precedenti nel repository pubblico) senza includere parte o tutta la cronologia dei commit?

+0

Perché non basta creare un nuovo repository? – Stephan

+1

@Stephan Sto benissimo creando un nuovo repository, ma come posso aggirare lo stato più recente dal vecchio repository e trasferirlo al nuovo? – Rafe

+12

puoi solo cancellare la cartella .git e fare di nuovo un init git sulla cartella le tue fonti sono – Stephan

risposta

105

È possibile limitare la profondità della storia, mentre cloning:

--depth <depth> 
Create a shallow clone with a history truncated to the specified 
number of revisions. 

Utilizzare questo se si vuole la storia limitato, ma ancora un po '.

+17

Dare a questo uomo un cookie (nel modo di contrassegnare correttamente questa risposta) :) – FateNuller

76

Utilizzare il seguente comando:

git clone --depth <depth> -b <branch> <repo_url> 

Dove:

  • depth è la quantità di commit che si desidera includere. Ad esempio, se si desidera semplicemente utilizzare l'ultimo commit, git clone --depth 1
  • branch è il nome del ramo remoto da cui si desidera clonare. vale a dire se si desidera che le ultime 3 commit da master ramo utilizzano git clone --depth 3 -b master
  • repo_url è l'URL del repository
+1

Questa è in realtà la stessa risposta di Gautier ma più completo e con un esempio. –

+0

In effetti lo è. A volte l'esempio è ciò che è necessario. Per me, la scrittura è ciò che ha chiarito il problema –

4
#!/bin/bash 
set -e 

# Settings 
user=xxx 
pass=xxx 
dir=xxx 
repo_src=xxx 
repo_trg=xxx 
src_branch=xxx 

repo_base_url=https://$user:[email protected]/$user 
repo_src_url=$repo_base_url/$repo_src.git 
repo_trg_url=$repo_base_url/$repo_trg.git 

echo "Clone Source..." 
git clone --depth 1 -b $src_branch $repo_src_url $dir 

echo "CD" 
cd ./$dir 

echo "Remove GIT" 
rm -rf .git 

echo "Init GIT" 
git init 
git add . 
git commit -m "Initial Commit" 
git remote add origin $repo_trg_url 

echo "Push..." 
git push -u origin master 
+0

il '--depth 1' non è necessario in questo caso perché la cronologia viene eliminata anche con' rm -rf .git' – rayphi

+1

Penso che lo farei in questo modo: 'git clone -depth 1 -b $ src_branch $ repo_src_url $ dir && cd ./$dir && git commit --amend --author "Some One <[email protected]>" -m "Initial Commit" && git origine set-url remota $ repo_trg_url && git push -u origine master' – rayphi

+0

@rayphi sì il '--depth 1' non è necessario ma è anche innocuo e consente di risparmiare un po 'di larghezza di banda della rete (nessun punto che recupera una cronologia che si' sto per cancellare comunque) –

Problemi correlati