it-swarm.com.de

Wie kann ich nicht aufgespürte Inhalte verfolgen?

Siehe unten die durchgezogene Linie für meine ursprüngliche Frage.

Ich habe einen Ordner in meinem lokalen Verzeichnis, der nicht verfolgt wird. Wenn ich git status starte, bekomme ich:

Changed but not updated:
modified:   vendor/plugins/open_flash_chart_2 (modified content, untracked content)

Wenn ich git add vendor/plugins/open_flash_chart_2 eingebe, dann versuche git status noch einmal, es wird immer noch untracked angezeigt. Was ist los? 


Hier ist eine einfache Zusammenfassung meiner letzten halben Stunde:

  • Festgestellt, dass mein Github-Repo mein vendor/plugins/open_flash_chart_2-Plugin nicht aufzeichnet. Insbesondere gibt es keinen Inhalt und es wird ein angezeigt grüner Pfeil auf dem Ordnersymbol.

  • Versucht git submodule init

    No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
    
  • Versucht git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2

    vendor/plugins/open_flash_chart_2 already exists in the index
    
  • git status 

    modified: vendor/plugins/open_flash_chart_2 (untracked content)
    
  • Es wurde nach einer Datei mit dem Namen .gitmodules in meinem Repository/lokalen Verzeichnis gesucht, die jedoch nicht gefunden werden konnte.

Was muss ich tun? meine Submodule zum Laufen bringen also kann git das tracking richtig starten?


Dies mag nicht miteinander verwandt sein (ich füge es hinzu, falls es hilft), aber jedes Mal, wenn ich git commit -a anstelle meines üblichen git commit -m "my comments" eingebe, wird ein Fehler ausgegeben:

E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
         dated: Thu Nov 11 19:45:05 2010
     file name: c:/san/project/.git/COMMIT_EDITMSG
      modified: YES
     user name: San   Host name: San-PC
    process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
         dated: Thu Nov 11 20:56:09 2010
  NEWER than swap file!  
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

Ich bin ein absoluter Neuling bei Github, und obwohl ich mich bemüht habe, die Dokumentation durchzugehen, bin ich von diesen besonderen Problemen etwas überrascht. Vielen Dank.

146
sscirrus

Sie haben vendor/plugins/open_flash_chart_2 als "gitlink" -Eintrag hinzugefügt, aber nie als Submodul definiert. Sie verwenden effektiv die interne Funktion, die git submodule verwendet (gitlink-Einträge), aber Sie verwenden nicht die Submodul-Funktion selbst.

Sie haben wahrscheinlich so etwas gemacht:

git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2

Dieser letzte Befehl ist das Problem. Das Verzeichnis vendor/plugins/open_flash_chart_2 beginnt als unabhängiges Git-Repository. Normalerweise werden solche Unter-Repositorys ignoriert, aber wenn Sie git add sagen, sie explizit hinzuzufügen, wird ein gitlink-Eintrag erstellt, der auf das HEAD - Commit des Unter-Repository verweist, anstatt den Inhalt hinzuzufügen des Verzeichnisses. Es könnte schön sein, wenn git add die Erstellung solcher "Semi-Submodule" ablehnen würde.

Normale Verzeichnisse werden in Git als Baumobjekte dargestellt. Baumobjekte geben den darin enthaltenen Objekten Namen und Berechtigungen (in der Regel andere Baum- und Blobobjekte - Verzeichnisse bzw. Dateien). Submodule werden als "Gitlink" -Einträge dargestellt. gitlink-Einträge enthalten nur den Objektnamen (Hash) des HEAD - Commits des Submoduls. Das "Quell-Repository" für ein Commit von gitlink wird in der .gitmodules-Datei angegeben (und der .git/config-Datei, nachdem das Submodul initialisiert wurde).

Sie haben einen Eintrag, der auf ein bestimmtes Commit verweist, ohne das Quell-Repository für dieses Commit aufzuzeichnen. Sie können dies beheben, indem Sie entweder Ihren GitLink zu einem geeigneten Submodul machen oder indem Sie den GitLink entfernen und durch „normalen“ Inhalt (einfache Dateien und Verzeichnisse) ersetzen.

Machen Sie daraus ein richtiges Submodul

Das einzige Bit, das Sie vermissen, um vendor/plugins/open_flash_chart_2 als Submodul richtig zu definieren, ist eine .gitmodules-Datei. Normalerweise (wenn Sie es noch nicht als bloßen Gitlink-Eintrag hinzugefügt hätten), würden Sie einfach git submodule add verwenden:

git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2

Wie Sie herausgefunden haben, funktioniert dies nicht, wenn der Pfad bereits im Index vorhanden ist. Die Lösung besteht darin, den gitlink-Eintrag vorübergehend aus dem Index zu entfernen und dann das Untermodul hinzuzufügen:

git rm --cached vendor/plugins/open_flash_chart_2
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2

Dies wird Ihr vorhandenes Sub-Repository verwenden (d. H. Das Quell-Repository wird nicht erneut geklont) und es wird eine .gitmodules-Datei erstellt, die folgendermaßen aussieht:

[submodule "vendor/plugins/open_flash_chart_2"]
    path = vendor/plugins/open_flash_chart_2
    url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2

Es wird auch einen ähnlichen Eintrag im .git/config des Haupt-Repositorys vorgenommen (ohne die Einstellung path).

Übernehmen Sie das und Sie haben ein richtiges Submodul. Wenn Sie das Repository klonen (oder Push to GitHub und von dort aus klonen), sollten Sie das Submodul über git submodule update --init neu initialisieren können.

Ersetzen Sie es durch einfachen Inhalt

Im nächsten Schritt wird davon ausgegangen, dass Ihr Sub-Repository in vendor/plugins/open_flash_chart_2 keine lokale Historie enthält, die Sie beibehalten möchten (d. H., Es geht Ihnen nur um den aktuellen Arbeitsbaum des Sub-Repositorys und nicht um die Historie).

Wenn Sie über ein lokales Protokoll in dem für Sie interessanten Unter-Repository verfügen, sollten Sie ein Backup des .git-Verzeichnisses des Unter-Repositorys erstellen, bevor Sie es im zweiten Befehl unten löschen. (Beachten Sie auch das git-Teilbaum-Beispiel, das den Verlauf des HEAD des Unter-Repositorys beibehält.

git rm --cached vendor/plugins/open_flash_chart_2
rm -rf vendor/plugins/open_flash_chart_2/.git # BACK THIS UP FIRST unless you are sure you have no local changes in it
git add vendor/plugins/open_flash_chart_2

Beim Hinzufügen des Verzeichnisses handelt es sich diesmal nicht um ein Sub-Repository, daher werden die Dateien normal hinzugefügt. Da wir das Verzeichnis .git gelöscht haben, gibt es leider keine sehr einfache Möglichkeit, die Dinge mit dem Quell-Repository auf dem neuesten Stand zu halten.

Sie können stattdessen auch eine Teilbaum-Zusammenführung verwenden. Auf diese Weise können Sie Änderungen einfach aus dem Quell-Repository übernehmen, während die Dateien in Ihrem Repository "flach" bleiben (keine Submodule). Der Fremdanbieter git-Teilbaum command ist ein Nice-Wrapper für die Teilbaum-Zusammenführungsfunktion.

git rm --cached vendor/plugins/open_flash_chart_2
git commit -m'converting to subtree; please stand by'
mv vendor/plugins/open_flash_chart_2 ../ofc2.local
git subtree add --prefix=vendor/plugins/open_flash_chart_2 ../ofc2.local HEAD
#rm -rf ../ofc2.local # if HEAD was the only tip with local history

Später:

git remote add ofc2 git://github.com/korin/open_flash_chart_2_plugin.git
git subtree pull --prefix=vendor/plugins/open_flash_chart_2 ofc2 master

git subtree Push --prefix=vendor/plugins/open_flash_chart_2 [email protected]:me/my_ofc2_fork.git changes_for_pull_request

git subtree verfügt auch über eine --squash-Option, mit der Sie das Einfügen des Verlaufs des Quell-Repositorys in Ihr Protokoll vermeiden können, aber dennoch die Upstream-Änderungen übernehmen können.

230
Chris Johnsen

Ich hatte gerade das gleiche Problem. Der Grund war, dass es einen Unterordner gab, der einen ".git" -Ordner enthielt. Das Entfernen machte sie glücklich.

109
neoneye
  1. Ich entfernte die .git-Verzeichnisse aus diesen neuen Verzeichnissen (dies kann Submodule-Drama erzeugen. Google bei Interesse.)
  2. Ich habe dann git rm -rf --cached/die/new Verzeichnisse ausgeführt
  3. Dann fügte ich die Verzeichnisse mit einem Git hinzufügen hinzu. von oben

Referenz-URL/- https://danielmiessler.com/blog/git-modified-untracked/#gs.W0C7X6U

8
user2041369

Um herauszufinden, was ich aus Chris Johansens Chat mit OP herausfinden musste (verbunden mit einer Antwort auf eine Antwort):

git add vendor/plugins/open_flash_chart_2 # fügt gitlink hinzu, der Inhalt wird nicht erfasst

git add vendor/plugins/open_flash_chart_2/ # HINWEIS DER SLASH !!!!

Das zweite Formular fügt es ohne GitLink hinzu, und der Inhalt kann verfolgt werden. Das .git-Verzeichnis wird bequem und automatisch ignoriert. Danke, Chris!

6
Peter Lada

Ich benutze immer den von Peter Lada vorgeschlagenen Trick, der als "gefälschte Submodule" bezeichnet wird:

http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb

Dies ist in mehreren Szenarien sehr nützlich (z. B. verwende ich alle meine Emacs-Konfigurationen in einem Repository, einschließlich der aktuellen HEAD aller Git-Repositorys in den elpa/el-get-Paketverzeichnissen). an eine bekannte funktionierende Version weiterleiten, wenn bei einem Update etwas kaputt geht).

5
Eloici

http://progit.org/book/ch6-6.html

Ich denke, Sie sollten dies lesen, um ein wenig über Submodule zu lernen. Es ist gut geschrieben und es dauert nicht lange, um es zu lesen.

3
rmk

Ich hatte das gleiche Problem mit einem großen Projekt mit vielen Submodulen. Basierend auf den Antworten von Chris Johnsenhier und VonChier baue ich ein kurzes bash-Skript, das iteriert alle vorhandenen gitlink-Einträge und fügt sie als geeignete Submodule hinzu.

#!/bin/bash

# Read all submodules in current git
MODULES=`git ls-files --stage | grep 160000`

# Iterate through every submodule path
while read -r MOD; do
  # extract submodule path (split line at whitespace and take string with index 3)
  ARRIN=(${MOD})
  MODPATH=${ARRIN[3]}

  # grep module url from .git file in submodule path
  MODURL=`grep "url = " $MODPATH/.git/config`
  MODURL=${MODURL##*=}

  # echo path and url for information
  echo $MODPATH
  echo $MODURL

  # remove existing entry in submodule index
  git rm --cached $MODPATH
  # add new entry in submodule index
  git submodule add $MODURL $MODPATH
done <<< "$MODULES"

Das hat es für mich behoben, ich hoffe, es hilft mir weiter.

2
nicolas

Diese Frage wurde bereits beantwortet, aber ich dachte, ich würde dem Mix hinzufügen, was ich herausfand, als ich diese Nachrichten erhielt.

Ich habe ein Repo namens playground, das eine Reihe von Sandbox-Apps enthält. Ich habe zwei neue Apps aus einem Tutorial zum Verzeichnis playground hinzugefügt, indem ich das Repo des Tutorials geklont habe. Das Ergebnis war, dass das Zeug der neuen Apps auf das Repo des Tutorials und nicht auf mein Repo hinwies. Die Lösung bestand darin, das Verzeichnis .git aus jedem der Verzeichnisse dieser Apps zu löschen, mv die Verzeichnisse der Apps außerhalb des Verzeichnisses playground, und dann mv zurück und führen Sie git add . aus. Danach hat es geklappt.

1
Dana Scheider

Das hat für mich gut funktioniert:

git update-index --skip-worktree

Wenn es nicht mit dem Pfadnamen funktioniert, versuchen Sie den Dateinamen. Lassen Sie mich wissen, ob dies auch für Sie funktioniert hat.

Tschüss!

1
DarkCrazy

Dieses Problem ist kürzlich bei der Arbeit an einem Vertragsprojekt aufgetreten (als klassifiziert). Das System, in dem ich den Code ausführen musste, hatte natürlich aus Sicherheitsgründen keinen Internetzugang. Daher wurde das Installieren von Abhängigkeiten mithilfe von Composer und npm zu einem großen Schmerz.

Nach langem Überlegen mit meinem Kollegen entschieden wir uns, es einfach zu kopieren und unsere Abhängigkeiten zu kopieren, anstatt Composer Install oder Npm Install durchzuführen.

Dies führte dazu, dass wir keine Anbieter und npm_modules in gitignore hinzufügen. Dies ist der Fall, als ich auf dieses Problem gestoßen bin.

Changed but not updated:
modified:   vendor/plugins/open_flash_chart_2 (modified content, untracked content)

Ich habe ein bisschen gegoogelt und diesen hilfreichen Thread zu SO gefunden. Ich bin nicht zu sehr ein Profi in Git und bin ein bisschen betrunken, während ich daran arbeite. Ich habe einfach alle Submodule im Herstellerordner gesucht

find . -name ".git"

Dies gab mir einige 4-5 Abhängigkeiten, die sich auf sie ausgewirkt hatten. Ich habe all diese .git-Ordner und voila entfernt, es hat funktioniert. Ich weiß, dass es hackt und sowieso kein sehr geeky. Oh Götter SO, bitte vergib mir! Das nächste Mal verspreche ich, auf Gitlinks nachzulesen und dem mächtigen Linus Tovalds zu gehorchen.

1
SLearner

Hatte das gleiche Problem, wurde aber in dieser Diskussion nicht gelöst.

Ich traf auch das Submodulproblem, wie in der Threadöffnung beschrieben.

% git status          
# On branch master
# Changes not staged for commit:
#   modified:   bundle/taglist (untracked content)

Als ich den Unterschied sah, erkannte ich, dass ein -dirty an einen Hash angehängt war: Das Lesen der Docs löste das Problem für mich. http://web.mit.edu/jhawk/mnt/spo/git/git-doc/user-manual.html Siehe Abschnitt "Fallstricke mit Submodulen".

Grund war, es gab Änderungen oder nicht erfaßten Inhalt innerhalb des Submoduls . Ich musste zuerst in das Submodulverzeichnis gehen und ein "git add" + "git commit" ausführen, um den gesamten Inhalt innerhalb des Submoduls zu verfolgen. 

Then "git status" on the master stated
% git commit
# On branch master
# Changes not staged for commit:
#   modified:   bundle/taglist (new commits)

Nun konnte dieses neue HEAD aus dem Submodul an das Master-Modul übergeben werden.

1
nero

Gehen Sie zuerst in das Verzeichnis Directory : vendor/plugins/open_flash_chart_2 undDELETE 


DANN :  

git rm --cached vendor/plugins/open_flash_chart_2  
git add .  
git commit -m "Message"  
git Push -u Origin master  

git status  

AUSGABE 

Auf dem Zweigmeister
Ihre Niederlassung ist mit 'Origin/Master' auf dem neuesten Stand.
nichts zu begehen, Arbeitsverzeichnis sauber 

0
Program-Me-Rev