Ich habe mehrere Dateien auf einer CodeIgniter-Site, die ich im Repo haben möchte, aber keine Änderungen nachverfolgen kann.
Ich stelle beispielsweise eine Neuinstallation dieses Frameworks auf einem neuen Client bereit, möchte, dass die folgenden Dateien heruntergeladen werden (sie haben die Standardwerte CHANGEME) und ich muss nur Änderungen vornehmen, die für diesen Client spezifisch sind (Datenbankanmeldeinformationen, E-Mail-Adressinformationen, Benutzerdefinierte CSS).
// the production config files i want the files but they need to be updated to specific client needs
application/config/production/config.php
application/config/production/database.php
application/config/production/tank_auth.php
// index page, defines the environment (production|development)
/index.php
// all of the css/js cache (keep the folder but not the contents)
/assets/cache/*
// production user based styling (color, fonts etc) needs to be updated specific to client needs
/assets/frontend/css/user/frontend-user.css
Zur Zeit wenn ich renne
git clone [email protected]:user123/myRepo.git httpdocs
und dann bearbeiten Sie die Dateien oben, alles ist großartig. Bis ich einen Hotfix oder Patch veröffentliche und starte git pull
. Alle meine Änderungen werden dann überschrieben.
Antworten:
Git hat eine andere Lösung, um dies zu tun. Ändern Sie zuerst die Datei, die nicht verfolgt werden soll, und verwenden Sie den folgenden Befehl:
Wenn Sie die Änderungen erneut verfolgen möchten, verwenden Sie diesen Befehl:
git-update-index Dokumentation
quelle
--skip-worktree
Option für diesen Job besser geeignet ist als--assume-unchanged
.So ziehen Sie eine Antwort aus den Kommentaren einer anderen Antwort heraus:
$ git update-index --skip-worktree FILENAME
Scheint eine bessere Option zu sein als
--assume-unchanged
Mehr dazu lesen Sie hier: Git - Unterschied zwischen 'unverändert annehmen' und 'Arbeitsbaum überspringen'
quelle
Für meine Code Igniter-Projekte behalte ich database.php.example und config.php.example im Repo.
Dann füge ich der .gitignore- Datei config.php und applications / config / database.php hinzu .
Wenn ich sie bereitstelle, kann ich die Beispieldateien (in config.php und database.php) kopieren, anpassen und sie werden von GIT nicht verfolgt.
quelle
Ich würde sie in Ihre
.gitignore
Datei einfügen und sie bei Bedarf einfach manuell kopieren.Der Skelett-Dateiname wäre also in Git, die Ignorier-Dateinamen wären nicht in Git (sondern in .gitignore). Auf diese Weise werden sie sofort ignoriert, wenn der manuelle Schritt zum Kopieren von "Vorlage" (vielleicht besserer Name als Skelett) in "tatsächlich" ausgeführt wird.
quelle
git rm <file>
. Der Zweck ist IE: eine config.php-Datei. Ich möchte die Konfigurationsdatei behalten, aber ich möchte natürlich nicht die Datenbankanmeldeinformationen von Client zu Client verfolgen, da sie unterschiedlich sind.git add file1
und bearbeiten Sie sie anschließend.gitignore
. Die festgeschriebene Datei bleibt dort und wird nicht aktualisiert. Oder: Sie können die Datei hinzufügen.gitignore
und dann hinzufügengit add --force file1
, um die Datei zu erzwingen. Sie können die zweite Option verwenden, wenn Sie die Datei überschreiben müssenDie Antworten lösen das Problem nur teilweise, führen aber noch mehr Probleme ein.
Ich musste die Datei "Web.Local.config" beibehalten. Die einzige Lösung, die für mich funktioniert hat, war:
1. Schließen Sie die Datei aus dem Projekt aus
2. Erstellen Sie eine separate Kopie der Datei als Web.LocalTemplate.config
Nachdem "Web.LocalTemplate.config" von Git verfolgt wird, können alle Entwickler es als Ausgangspunkt verwenden. Die "Web.Local.config", die nicht Teil des Projekts ist, wird jedoch automatisch ignoriert.
quelle
git update-index --skip-worktree FILENAME
löst man sein Problem nur teilweise oder fügt sogar noch mehr Probleme hinzu? Es löst genau das, was Sie versuchen zu tun. Hast Du es versucht?