2015-03-31 11 views
64

Ich habe derzeit ein privates Repository auf GitHub, die ich veröffentlichen möchte. Einige der anfänglichen Commits enthalten jedoch Informationen, die ich nicht veröffentlichen möchte (hardcoded crentials, etc).Kopieren Sie ein Git Repo ohne Geschichte

Was ist der einfachste Weg die letzte commit öffentlich zu machen (ich weiß nicht wirklich brauchen oder die vorherigen Commits im öffentlichen Repository wollen) ohne Geschichte einige oder alle der Festschreibungs einschließlich?

+0

Warum nicht erstellen, die Sie gerade ein neues Repository? – Stephan

+1

@Stephan Mir geht es gut, ein neues Repository zu erstellen, aber wie hänge ich den letzten Status aus dem alten Repository und verbinde ihn mit dem neuen? – Rafe

+12

Sie können einfach den .git-Ordner löschen und ein git init erneut auf dem Ordner Ihre Quellen sind – Stephan

Antwort

105

Sie können die Tiefe der Geschichte, während cloning begrenzen:

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

verwenden, wenn Sie begrenzte Geschichte wollen, aber immer noch einige.

+17

Geben Sie diesem Mann ein Cookie (in Form der Markierung dieser Antwort richtig) :) – FateNuller

76

Verwenden Sie den folgenden Befehl ein:

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

Wo:

  • depth ist die Menge an Commits Sie einschließen möchten. d. h., wenn Sie nur die neueste Festschreibung wünschen, verwenden Sie git clone --depth 1
  • branch ist der Name der Remote-Zweig, den Sie klonen möchten. das heißt, wenn Sie die letzten 3 Festschreibungen von master Zweig wollen verwenden git clone --depth 3 -b master
  • repo_url die URL Ihrer Repository
+1

Dies ist eigentlich die gleiche Antwort als Gautier aber mehr vervollständigen und mit einem Beispiel. –

+0

In der Tat ist es. Manchmal ist das Beispiel, was benötigt wird. Für mich ist es das, was das Problem geklärt hat –

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

das '--depth 1' ist in diesem Fall unnötig, weil der Verlauf auch gelöscht wird mit' rm -rf .git' – rayphi

+1

Ich denke, ich würde es so tun: 'git klon --depth 1 -b $ src_branch $ repo_src_url $ dir && cd ./$dir && git commit --amend --author "Irgendeiner <[email protected]>" -m "Initial Commit" && git remote set-url ursprung $ repo_trg_url && git push -u origin master' – rayphi

+0

@rayphi ja die '--depth 1' ist unnötig, aber es ist auch harmlos und es spart ein wenig Netzwerkbandbreite (kein Punkt holt einen Verlauf, den Sie ' sowieso schon löschen) –