webentwicklung-frage-antwort-db.com.de

git: Wie fügt man dem Repository ein externes Verzeichnis hinzu?

Ich möchte ein externes Verzeichnis zu einem vorhandenen Repository hinzufügen.

Externes Verzeichnis: /Home/some/verzeichnis

Arbeitsverzeichnis: /Htdocs/.git

Wenn ich versuche, den folgenden Befehl aus dem Verzeichnis/htdocs auszuführen:

git add/home/some/verzeichnis

Ich erhalte eine Fehlermeldung: Fatal: '/ home/some/verzeichnis' liegt außerhalb des Repository 

41
Sly

Wenn ich so etwas tun muss, würde ich normalerweise diese externe Datei oder dieses Verzeichnis in mein Git Repo verschieben und den ursprünglichen Speicherort mit dem neuen Link verknüpfen.

mv /home/some/directory /htdocs/directory
ln -s /htdocs/directory /home/some/
git add ./directory

Ich verwende diese Technik, wenn ich ein Plug-In für eine Anwendung entwickle, die ich unter Versionskontrolle behalten möchte, aber an einem bestimmten Ort speichern muss.

48
csexton

Ich hatte den gleichen Fehler ... googelte es zu Tode ... es kam nicht viel heraus.

Die Antwort von Christian hat funktioniert: 

git --work-tree=/ add /home/some/directory

Aber dann "Work-Tree" brachte mich in Schwung. Ich griff alle Git-Dokumente an und kam mit core.worktree.

Ich benutzte

git config --global core.worktree /

Und voila! Ich kann jetzt das Verzeichnis any im Verzeichnis hinzufügen. __ Ich weiß nicht, ob es an anderen Stellen Probleme verursachen wird, aber ich werde versuchen, es zu aktualisieren.

15
MotherDawg
git --work-tree=/ add /home/some/directory
13
anon

Dafür gibt es eine wirklich einfache Lösung. 

Nehmen wir an, Sie befinden sich in/var/data/my-app und möchten diesem Repo/var/data/public/hinzufügen. Sie können 'add' nicht verwenden, da Git keine Ressourcen außerhalb des Stammverzeichnisses des Repos hinzufügt. So.. 

Lösung:

  1. Verschieben Sie das Verzeichnis/var/data/public/in Ihr Git-Repo-Stammverzeichnis (/ var/data/my-app).

  2. Erstellen Sie innerhalb von/var/data/public einen symbolischen Link (symbolischer Link) zum Ordner/var/data/my-app/public, indem Sie Folgendes verwenden: ln -s source_file_or_directory virtual_file_or_directory

Fügen Sie dann die verschobene Datei oder das Verzeichnis mit git add auf normale Weise zu Git hinzu. Ihre Git-Quellcodeverwaltung verfolgt nun die gewünschte Datei/den gewünschten Ordner und Ihr Sym-Link im externen Verzeichnis stellt sicher, dass die Datei/der Ordner für alles andere zugänglich ist!

8
Stormbytes

Wenn der Code, den Sie zu Ihrem Repo hinzufügen möchten, nicht zu groß ist, können Sie ihn auch vor jedem Push automatisch in Ihr Repo kopieren.

In meinem Fall brauche ich zum Beispiel eine R-Datei, die ich häufig modifiziere, in mehreren Repos und ich schrieb ein kleines Shell-Skript:

#!/usr/bin/env bash

cp -r /some/directory/file.R .
git add .
git commit -m "add"
git Push

... und ich führe dieses Skript aus, um alle Änderungen einschließlich der Änderungen im Verzeichnis/some/zu pushen.

1

Das hat mich zum Nachdenken angeregt, da ich sehr gerne die Lösung einer symbolverknüpften Datei/Verzeichnis verwenden möchte, aber auf einem Windows-Computer feststeckt. Soweit ich weiß, funktionieren die Symlinks in Windows nicht wirklich auf dieselbe Weise. Eine andere Lösung könnte sein, zwei Scripts/Bash-Funktionen zu schreiben, um die betreffenden Dateien zu "importieren" und "zu exportieren", z.

import() {
    cp -fr /home/some/directory /htdocs/
}

export() {
    cp -fr /htdocs/directory /home/some/
}

Dann hätten Sie eine Kopie der Datei in Ihrem Repository, die Sie git add eingeben könnten.

0
Tubbles

Oder Sie können Submodule verwenden, wenn Sie mit verschiedenen Git-Repos arbeiten möchten (ln funktioniert auf diese Weise nicht). Versuchen Sie es mit 'man git-submodul'.

0
superarts.org