Git Zeitstempel zensieren


Git Zeitstempel zensieren

Git Repositories enthalten jede Menge Informationen. Nicht nur über den Code, auch meta-informationen wie die Namen und Emailaddressen der Comitter. Solche Daten können durchaus sensibel sein - sie legen zum Beispiel offen…

Ich habe sogar mal einen Talk darüber gehalten, wie man solche Daten aus Repos ausgraben kann: Git archeology

Die meisten meiner Git Repos sind öffentlich und das ist auch in Ordnung. Aber in letzter Zeit sind mir diese Daten mehr ins bewusstsein geglangt.

Für neue Repos zensiere ich deshalb ganz gerne zumindest die Commit-Uhrzeiten, bevor ich sie veröffentliche. Ich schreibe dafür einfach die Git-Vergangenheit neu und setze alle Uhrzeiten auf eine Konstante.

Das geht ganz einfach mit dem Program git filter-repo und diesem Skript, das ich im git repo ausführe.

git filter-repo --commit-callback '
import datetime

# Decode the author and committer dates from bytes
original_author_date_str = commit.author_date.decode("utf-8").split(" ")[0]
original_committer_date_str = commit.committer_date.decode("utf-8").split(" ")[0]

# Convert to integer timestamps
original_author_timestamp = int(original_author_date_str)
original_committer_timestamp = int(original_committer_date_str)

# Get the original author and committer dates
original_author_date = datetime.datetime.fromtimestamp(original_author_timestamp)
original_committer_date = datetime.datetime.fromtimestamp(original_committer_timestamp)

# Set the new time to 00:00:01
new_time_author = original_author_date.replace(hour=0, minute=0, second=1)
new_time_committer = original_committer_date.replace(hour=0, minute=0, second=1)

# Update the author and committer dates
commit.author_date = f"{int(new_time_author.timestamp())} +0200".encode("utf-8")
commit.committer_date = f"{int(new_time_committer.timestamp())} +0200".encode("utf-8")
'

Wie immer gilt natürlich: Wer so ein Skript auf seinem Repo ausführt, ohne ein Backup zu haben ist selbst schuld.