Lösung 3
Dies dient zur Verwendung eines einzelnen Verzeichnisses für mehrere Projekte. Ich verwende diese Technik für einige eng verwandte Projekte, bei denen ich häufig Änderungen von einem Projekt in ein anderes ziehen muss. Es ähnelt der Idee der verwaisten Zweige, aber die Zweige müssen nicht verwaist sein. Starten Sie einfach alle Projekte aus demselben leeren Verzeichnisstatus.
Starten Sie alle Projekte aus einem festgeschriebenen leeren Verzeichnis
Erwarten Sie keine Wunder von dieser Lösung. Aus meiner Sicht werden Sie immer Ärger mit nicht verfolgten Dateien haben. Git hat nicht wirklich eine Ahnung, was mit ihnen zu tun ist. Wenn also Zwischendateien von einem Compiler generiert und von Ihrer Gitignore-Datei ignoriert werden, bleiben sie wahrscheinlich einige Zeit hängen, wenn Sie versuchen, schnell zu tauschen zwischen - zum Beispiel - Ihrem Softwareprojekt und einem Doktorandenprojekt.
Hier ist jedoch der Plan. Beginnen Sie so, wie Sie Git-Projekte starten sollten, indem Sie das leere Repository festschreiben, und starten Sie dann alle Ihre Projekte aus demselben leeren Verzeichnisstatus. Auf diese Weise sind Sie sicher, dass die beiden Lose ziemlich unabhängig voneinander sind. Geben Sie Ihren Filialen auch einen richtigen Namen und verwenden Sie nicht nur "master". Ihre Projekte müssen getrennt sein, geben Sie ihnen entsprechende Namen.
Git-Commits (und damit Tags und Zweige) speichern im Grunde genommen den Status eines Verzeichnisses und seiner Unterverzeichnisse, und Git hat keine Ahnung, ob dies Teile desselben oder verschiedener Projekte sind. Es ist also wirklich kein Problem, wenn Git verschiedene Projekte im selben Repository speichert. Das Problem besteht dann darin, dass Sie die nicht verfolgten Dateien aus einem Projekt löschen, wenn Sie ein anderes verwenden, oder die Projekte später trennen.
Erstellen Sie ein leeres Repository
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
Starten Sie Ihre Projekte leer.
Arbeite an einem Projekt.
git branch software EMPTY
git checkout software
echo "array board[8,8] of piece" > chess.prog
git add chess.prog
git commit -m "chess program"
Starten Sie ein anderes Projekt
wann immer du magst.
git branch thesis EMPTY
git checkout thesis
echo "the meaning of meaning" > philosophy_doctorate.txt
git add philosophy_doctorate.txt
git commit -m "Ph.D"
Hin und her wechseln
Wechseln Sie zwischen Projekten hin und her, wann immer Sie möchten. Dieses Beispiel geht auf das Schach-Software-Projekt zurück.
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
Nicht verfolgte Dateien sind ärgerlich
Sie werden sich jedoch über nicht verfolgte Dateien beim Wechseln zwischen Projekten / Zweigen ärgern.
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
Es ist kein unüberwindbares Problem
Per Definition weiß Git nicht wirklich, was er mit nicht verfolgten Dateien tun soll, und es liegt an Ihnen, mit ihnen umzugehen. Sie können verhindern, dass nicht verfolgte Dateien wie folgt von einem Zweig zum anderen übertragen werden.
git checkout EMPTY
ls
untracked_software_file.prog
rm -r *
(directory is now really empty, apart from the repository stuff!)
git checkout thesis
ls
philosophy_doctorate.txt
Indem wir vor dem Auschecken unseres neuen Projekts sicherstellten, dass das Verzeichnis leer war, stellten wir sicher, dass keine nicht verfolgten Dateien von einem anderen Projekt hängen.
Eine Verfeinerung
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
Wenn beim Festschreiben eines leeren Repositorys dieselben Daten angegeben werden, können unabhängig erstellte Commits für leere Repositorys denselben SHA1-Code haben. Auf diese Weise können zwei Repositorys unabhängig voneinander erstellt und später in einem Repository zu einem einzigen Baum mit einem gemeinsamen Stamm zusammengeführt werden.
Beispiel
# Create thesis repository.
# Merge existing chess repository branch into it
mkdir single_repo_for_thesis_and_chess
cd single_repo_for_thesis_and_chess
git init
touch .gitignore
git add .gitignore
GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01:T01:01:01' git commit -m empty
git tag EMPTY
echo "the meaning of meaning" > thesis.txt
git add thesis.txt
git commit -m "Wrote my PH.D"
git branch -m master thesis
# It's as simple as this ...
git remote add chess ../chessrepository/.git
git fetch chess chess:chess
Ergebnis
Unterverzeichnisse pro Projekt verwenden?
Es kann auch hilfreich sein, wenn Sie Ihre Projekte nach Möglichkeit in Unterverzeichnissen aufbewahren, z. B. anstatt Dateien zu haben
chess.prog
philosophy_doctorate.txt
haben
chess/chess.prog
thesis/philosophy_doctorate.txt
In diesem Fall wird Ihre nicht verfolgte Softwaredatei sein chess/untracked_software_file.prog
. Wenn Sie im thesis
Verzeichnis arbeiten, sollten Sie nicht durch nicht verfolgte Schachprogrammdateien gestört werden, und es kann vorkommen, dass Sie problemlos arbeiten können, ohne nicht verfolgte Dateien aus anderen Projekten zu löschen.
Wenn Sie nicht verfolgte Dateien aus anderen Projekten entfernen möchten, ist es außerdem schneller (und weniger fehleranfällig), ein unerwünschtes Verzeichnis zu sichern, als unerwünschte Dateien durch Auswahl der einzelnen zu entfernen.
Zweigstellennamen können '/' Zeichen enthalten
Vielleicht möchten Sie Ihre Filialen so nennen
project1/master
project1/featureABC
project2/master
project2/featureXYZ