Blog Post

Șterge orice urmă a unui fișier dintr-un repo git

Dec. 9, 2015, 10:41 a.m. git


Înainte să publici un Repo pe github este bine să verifici că nu ai date sensibile în structura de fișiere. De exemplu un fișier de setări cu parole la baza de date.

Comenzi folosite:

  • git filter-branch
  • git remote
  • git status

Dacă ești în această situație, modifici fișierul (de exemplu citești parola dintr-o variabilă aflată în memorie), dar dacă ai folosit consecvent git, atunci datele se vor afla in istoricul repo-ului.

Putem folosi următoarea comandă pentru a sterge orice urmă:

    $ git filter-branch --tree-filter 'rm -rf src/MyDjangoProject/settings/test.py' HEAD

    Rewrite 237ea096172ae690f6dd01b39c0b850759c3b382 (53/53)
    Ref 'refs/heads/master' was rewritten

    $ git status
    On branch master
    Your branch and 'digi/master' have diverged,
    and have 35 and 33 different commits each, respectively.
      (use "git pull" to merge the remote branch into yours)
    nothing to commit, working directory clean

    $ git remote -v
    digi    ssh://[email protected]:2121/home/myuser/myProjects/ionescu77/.git (fetch)
    digi    ssh://[email protected]:2121/home/myuser/myProjects/ionescu77/.git (push)

Atenție, comanda filter_branch rm va șterge orice urmă a fișierului test.py, așa că înainte de execuție verificați dacă ați preluat toate datele aflate în fișier. În cazul meu am setat și un remote repo, care nu îl mai folosesc, așa că vom sterge și referința către digi.

    # Ștergem digi
    $ git remote rm digi
    # Adăgăm alt repo
    $ git remote add telekom ssh://[email protected]/home/razvansky/myProjects/ionescu77/.git
    # Verificăm operațiunea
    $ git remote -v
     telekom    ssh://[email protected]/home/razvansky/myProjects/ionescu77/.git (fetch)
     telekom    ssh://[email protected]/home/razvansky/myProjects/ionescu77/.git (push)

Această comandă va îndepărta doar referința către remote repo și nu va șterge fișierele aflate în git repo pe celălalt server.

Aveți aici mai multe informații despre stergerea unui fișier dintr-un git repo sau eliminarea unui repo din lista de conexiuni remote.