Ich habe ein tmp-Verzeichnis in meinem Git-Repo, das ich gerne noch existieren würde, aber ignoriert werde. Ich habe es hinzugefügt .gitignore
, git status
erzähle mir aber trotzdem über Änderungen an Dateien in diesem Verzeichnis. Ich habe es versucht git rm -r --cached
, aber das entfernt es aus dem Remote-Repo. Wie kann ich die Verfolgung von Änderungen an diesem Verzeichnis beenden, es aber trotzdem zulassen? Ich muss dies auch für 1 Datei tun, aber Änderungen daran werden auch git status
nach dem .gitignore
Erstellen angezeigt. Was soll ich machen?
git
version-control
21312312
quelle
quelle
Antworten:
Stattdessen
.gitignore
können Sie das lokale Git-Repository aktualisieren, indem Sie den folgenden Befehl ausführen:In diesem Fall wird eine Datei im Ursprungs-Repo verfolgt. Sie können es in Ihrem lokalen Repo ändern und Git wird es niemals als geändert markieren. Lesen Sie mehr unter:
quelle
git update-index --no-assume-unchanged <file>
. Wenn Sie sie auflisten möchtengit ls-files -v | grep '^h'
.Das Ignorieren von Änderungen, die an Dateien vorgenommen wurden, während sie existieren, ist der genaue Zweck von
.gitignore
. Fügen Sie also die Dateien (oder Verzeichnisse) hinzu.gitignore
ist das einzige, was Sie tun müssen.Ihr Problem ist jedoch, dass git bereits die Dateien verfolgt, die Sie ignorieren möchten, und
.gitignore
nicht für verfolgte Dateien gilt. Die einzige Möglichkeit, dieses Tracking zu stoppen, besteht darin, git anzuweisen, sie zu entfernen. Durch die Nutzunggit rm --cached
verhindern Sie, dass git Ihre lokalen Dateien löscht, aber jedes andere Repository, das Ihre Änderungen erhält, wendet das Entfernen an. Ich glaube nicht, dass es eine Möglichkeit gibt, dies aus Ihrem eigenen Repository heraus zu vermeiden. Sie müssen etwas in den anderen Repositorys tun oder akzeptieren, dass die Dateien entfernt werden.Um zu verhindern, dass das andere Repository entfernt wird, können Sie:
git rm --cached
die Dateien und Commit, bevor Sie Ihre Änderungen abrufen. Git wird die beiden Entfernungen gut zusammenführen, ohne die bereits nicht verfolgten Dateien zu berühren.quelle
git update-index --assume-unchanged <file>
. Werfengit rm --cached <filename> -r
Push- Repositorie in Git entfernen muss und nach diesem Push wieder in die Repositorie wechselt, damit die Datei entfernt wirdFügen Sie
/
am Ende des Verzeichnisnamens ein in Ihre.gitignore
Datei ein, d. H.Wenn Sie Dateien in diesem Verzeichnis verfolgt haben, müssen Sie git anweisen, diese zuerst zu vergessen (bevor Sie das Verzeichnis zur Ignorierliste hinzufügen). Angenommen, Sie haben nichts Wichtiges drin (dh Sie können es kratzen):
Neue Dateien in diesem Verzeichnis werden nicht verfolgt.
Die
--cached
Option,git rm
nur mit dem Index zu arbeiten (ausstehende Änderungen mehr oder weniger). Es hat keine Auswirkungen auf den Arbeitsbaum oder den Status dessen, was verfolgt wurde oder nicht.quelle
the/dir/
undthe/dir/*
.gitignore hat keine Auswirkung auf verfolgte Dateien.
Sie möchten das angenommene unveränderte Bit für die Dateien im Verzeichnis tmp / setzen. Hier gibt es eine gute Erklärung dafür: Git: Entfolgen Sie eine Datei nur im lokalen Repo und behalten Sie sie im Remote-Repo
Einzeiler zum Festlegen von "unverändert" für alle Dateien in einem Verzeichnis - git update-index - nehmen an, unverändert für das Verzeichnis .
quelle
Es hört sich so an, als würden Sie versuchen, eine Datei zu verfolgen (z. B.
index.php
), sie einem Remote-Repository hinzuzufügen und dann die Verfolgung zu beenden, während Sie die Datei auf der Fernbedienung behalten (dhindex.php
auf dem Remote-Repo unverändert bleiben, während Sie sie lokal ändern).Soweit ich weiß, kann Git das nicht. Sie können entweder eine Datei verfolgen oder nicht. Wenn Sie eine Datei verfolgen, ist sie im Remote-Repo vorhanden und ändert sich, wenn Sie Änderungen daran festschreiben. Wenn Sie eine Datei nicht verfolgen, ist sie im Remote-Repo nicht vorhanden.
Da es mit git nicht möglich ist, genau das zu tun, was Sie wollen, gibt es möglicherweise andere Lösungen, abhängig von Ihrer genauen Situation. Warum möchten Sie beispielsweise nicht
index.php
auf der Fernbedienung ändern, wenn Sie sie lokal ändern? Gibt es benutzerspezifische Einstellungen in der Datei? In diesem Fall können Sie Folgendes tun:Bearbeiten Sie nun index_template.php so, wie es auf dem Remote-Repo angezeigt werden soll. Fügen Sie Ihrer README-Datei etwas hinzu, um den Benutzern Ihres Repositorys mitzuteilen, dass sie nach dem Klonen index_template.php in index.php kopieren und entsprechend ihren Anforderungen bearbeiten müssen.
Wenn jemand Ihr Repo klont, muss er sein eigenes erstellen
index.php
. Sie haben es ihnen leicht gemacht: einfach kopierenindex_template.php
zuindex.php
und überarbeiten sie mit computerspezifischen Einstellungen.quelle