ebody: Git - Codezeile mit API Key in jeder Datei aus vorherigen commits ändern.

Hallo,

ich möchte auf github.com ein Repository erstellen und Dateien hochladen. Zuvor arbeite ich aber lokal am Code und verwende zum testen einen API Key. Dieser soll später aber nicht mehr in den öffentlichen Dateien und Dateien der Commit Historie zu finden sein.

Wie geht man am besten vor?

  1. Ist es möglich mit Git eine Codezeile in jeder Datei, auch aus vorherigen commits zu ändern?

  2. Gibt es evtl. ein Zeichen, welches man vor eine Codezeile setzt und so nicht committed wird. Ähnlich wie Dateien, die man in der .gitignore Datei einträgt?

Gruß ebody

  1. Hallo ebody,

    wegen der historischen Commits: Wieviel Wert legst Du auf deine History? Kannst Du nicht einfach den aktuellen Stand nach github übertragen, und die History abschneiden?

    Den API Key solltest Du keinesfalls irgendwo einchecken. Der gehört in eine Config-Datei, von der es im Git lediglich eine Musterversion gibt. Beim Deploy muss die echte Config-Datei hinzugefügt werden.

    Für echte Orwellsche Verhältnisse (rewrite the history) ist, soweit ich das verstehe, der rebase-Befehl dein Freund. Aber ich weiß nicht, wie man das richtig macht.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo,

      1. Ist es möglich mit Git eine Codezeile in jeder Datei, auch aus vorherigen commits zu ändern?

      Hierfür habe ich eine Möglichkeit gefunden und konnte in einem sehr übersichtlichen Test Projekt den Code in vergangenen Commits ändern. Wenn ein Repository aber schon mit anderen geteilt wurde, sollte man vorab gut abwägen, ob das sinnvoll ist oder wenn man Verzeichnisse und Dateien hatte, deren Name geändert, die gelöscht, verschoben wurden, kann das bestimmt ganz schön mühselig werden.

      Man kann das mit rebase und commit --amend umsetzen.

      Hier eine grobe Übersicht und ein Beispiel:

      In dem markierten Commit habe ich in der index.html einen API Key eingetragen: <p>My Api Key: 123456</p> Die index.html ist in den darauf folgenden Commits mit dem API Key ebenfalls vorhanden und möchte in jedem Commit den API Key im Code ändern in: <p>My Api Key: strApiKey</p>

      Git Commits

      1. git rebase -i f831c62
      2. Fenster öffnet sich, wo Commits aufgelistet werden. Befehl für gewünschten Commit wählen: edit ... 9013402
      3. Änderung in der index.html vornehmen: <p>My Api Key: strApiKey</p>
      4. git add .
      5. git commit --amend
      6. Fenster öffnet sich, Commit bestätigen indem man es einfach schließt.
      7. git rebase --continue
      8. Man befindet sich jetzt im nächsten Commit 4b31c1a und muss Konflikte lösen. In der betroffenen Datei (index.html) "Accept Both Changes" wählen und den Code anpassen.
      9. git add .
      10. git rebase --continue
      11. Man befindet sich jetzt im nächsten (und letzten) Commit ef70ecc und muss Konflikte lösen. In der betroffenen Datei (index.html) "Accept Both Changes" wählen und den Code anpassen.
      12. git add .
      13. git rebase --continue

      Fertig. Die Commit ID´s haben sich danach geändert und der Code in jeder index.html ist jetzt <p>My Api Key: strApiKey</p>.

      In diesem Kurs https://codewithmosh.com/p/the-ultimate-git-course, den ich übrigens sehr empfehlen kann, wird das alles sehr gut erklärt und gezeigt im Video im Kurs Teil "9- Amending an Earlier Commit".

      Zu 2. Gibt es evtl. ein Zeichen, welches man vor eine Codezeile setzt und so nicht committed wird. Ähnlich wie Dateien, die man in der .gitignore Datei einträgt?

      Sensible Daten lager ich jetzt immer aus und binde sie ein. Ich habe eine hide.js erstellt, zuvor in der .gitignore eingetragen, in der hide.js var strApiKey = '123456'; Die hide.js binde ich in die jeweilige Datei ein, wo ich sie brauche und kann dort strApiKey verwenden, wenn ich den API Key benötige.

      Gruß ebody

  2. Hi,

    ich möchte auf github.com ein Repository erstellen und Dateien hochladen. Zuvor arbeite ich aber lokal am Code und verwende zum testen einen API Key. Dieser soll später aber nicht mehr in den öffentlichen Dateien und Dateien der Commit Historie zu finden sein.

    Wie geht man am besten vor?

    1. Ist es möglich mit Git eine Codezeile in jeder Datei, auch aus vorherigen commits zu ändern?

    Das klingt nach einem Pre-Commit-Hook. Ich weiß zwar, daß es das gibt, hab aber noch nie selber einen eingesetzt. Details müßtest Du also selber erduckducken.

    cu,
    Andreas a/k/a MudGuard

  3. Moin,

    ich möchte auf github.com ein Repository erstellen und Dateien hochladen. Zuvor arbeite ich aber lokal am Code und verwende zum testen einen API Key. Dieser soll später aber nicht mehr in den öffentlichen Dateien und Dateien der Commit Historie zu finden sein.

    Wie geht man am besten vor?

    • Lege im Repository eine Datei api.key.example an, die du als Dummy eincheckst und dokumentierst, dass diese Datei mit dem echten API-Key zu befüllen und in api.key umzubenennen ist.
    • Lade in deinem Code deine api.key.
    • Schreibe die api.key in die .gitignore.
    • git add api.key.example .gitignore; git commit

    Viele Grüße
    Robert