Ich habe einen Ordner unter Versionskontrolle. Ich möchte eine Kopie davon erstellen, um sie zu versenden, möchte aber nicht alle .git-Verzeichnisse und die Dateien darunter einschließen.
Gibt es eine Möglichkeit, alle Git-Dateien zu entfernen, anstatt sie alle manuell zu löschen?
Antworten:
Der .git-Ordner wird nur im Stammverzeichnis des Repos gespeichert, nicht in allen Unterverzeichnissen wie Subversion. Sie sollten in der Lage sein, nur diesen einen Ordner zu löschen, es sei denn, Sie verwenden Submodule ... dann haben sie auch einen.
quelle
git archive
; Es ist für diesen Zweck oder sogar nur für alles außer dem .git-Verzeichnis..gitignore
Datei und dergleichen löschen . Ich denke, Sie könnten ein Skript schreiben, um dies zu tun, aber es könnte einfacher sein, nur git-archive zu verwenden und sie dann manuell aus der archivierten Version zu löschen.git archive
die Jefromi erwähnt. Es gibt auch einen Link zurück zur Stackoverflow-Frage 160608 ..git
aber Sie können überall Repos haben, z.vendor/something/something/.git
.So entfernen Sie alle
.git
Verzeichnisse unter einem Ordner unter Linux.Führen Sie diesen Befehl find aus, um alle
.git
Verzeichnisse im aktuellen Ordner aufzulisten:Drucke:
Es sollte nur 3 oder 4
.git
Verzeichnisse geben, da git nur einen .git-Ordner für jedes Projekt hat. Sie könnenrm -rf yourpath
jedes der oben genannten von Hand.Wenn Sie alle in einem Befehl entfernen und gefährlich leben möchten:
quelle
.repo
Ordner (oben im Baum) zu entfernen, wenn Sie alle Git-bezogenen Ordner entfernen (wenn Sie eine Android-Entwicklung durchführen). source.android.com/source/developing.html-type d
Klausel aus der.git
find-Anweisung entfernen , damit auch die .git-Dateien der Submodule gelöscht werden.Sie können git-archive verwenden , zum Beispiel:
Wo
master
ist der gewünschte Zweig.quelle
cp -r
cp -r
keine Dateien und Verzeichnisse, die nicht Teil des Repositorys sind, einschließlich ignorierter Dateien. Wenn Sie jedoch sicher sind, dass Sie dies nicht benötigen und Ihre Verarbeitung / Zeit kritisch ist, fahren Sie fortcp
.git archive
hat ein Nachteil - Es exportiert keine Submodule. Man müsstegit submodule foreach --recursive git archive ...
. Extrem schlecht!cd
dann zum RepositoryStellen Sie sicher, dass Sie nicht versehentlich einen einzelnen Punkt, einen Schrägstrich, ein Sternchen oder einen anderen Regex-Platzhalter in find finden, da er sonst
rm
problemlos gelöscht wird.quelle
find: ./.git: No such file or directory
es funktioniert hat. Wie auch immer, um zu verhindern, dass die Benachrichtigung angezeigt wird?Für den Fall, dass jemand anderes auf dieses Thema stößt - hier ist eine "Einheitslösung".
Wenn Sie
.git
oder verwenden.svn
, können Sie die--exclude-vcs
Option für Teer verwenden. Dadurch werden viele verschiedene Dateien / Ordner ignoriert, die von verschiedenen Versionskontrollsystemen benötigt werden.Weitere Informationen finden Sie unter: http://www.gnu.org/software/tar/manual/html_section/exclude.html
quelle
Im Gegensatz zu anderen Versionsverwaltungssystemen wie SVN oder CVS speichert git alle Metadaten in einem einzigen Verzeichnis und nicht in jedem Unterverzeichnis des Projekts. Also einfach
.git
aus dem Stammverzeichnis löschen (oder ein Skript wie git-export verwenden ) und es sollte dir gut gehen.quelle
ls | xargs find 2> / dev / null | egrep /\.git$ | xargs rm -rf
Dieser Befehl (und es ist nur ein Befehl) entfernt rekursiv .git-Verzeichnisse (und -Dateien), die sich in einem Verzeichnis befinden, ohne das Git-Repo der obersten Ebene zu löschen. Dies ist praktisch, wenn Sie alle Ihre Dateien festschreiben möchten, ohne Submodule zu verwalten .
finde 2> / dev / null | egrep /\.git$ | xargs rm -rf
Dieser Befehl führt dasselbe aus, löscht jedoch auch den Ordner .git aus dem Verzeichnis der obersten Ebene.
quelle