Jak kazać gitowi ignorować poszczególne linie, np. gitignore dla konkretnych linii kodu [duplicate]

To pytanie ma już odpowiedź tutaj:

.gitignore może ignorować całe pliki, ale czy istnieje sposób, aby ignorować określone linie kodu podczas kodowania?

Często i wielokrotnie dodaję te same linie debugowania w projekcie, tylko po to, aby pamiętać o ich usunięciu przed zatwierdzeniem. Chciałbym po prostu zachowaj linie w kodzie i niech git je zignoruje.

Author: Kache, 2013-04-27

2 answers

Tak można to zrobić z filtrami git :

  1. Utwórz / Otwórz plik gitattributes:
    • /.gitattributes (will be committed into repo)
      Lub
    • /.git / info / attributes (nie będzie przypisany do repo)
  2. Dodaj linię definiującą pliki do filtrowania:
    • *.rb filter=gitignore, tzn. Uruchom filtr o nazwie gitignore na wszystkich plikach *.rb
  3. Zdefiniuj filtr gitignore w swoim gitconfig:
    • $ git config --global filter.gitignore.clean "sed '/#gitignore$/'d", tzn. usuń te linie
    • $ git config --global filter.gitignore.smudge cat, tzn. nie rób nic podczas pobierania pliku z repo

Uwagi:
Oczywiście dotyczy to Plików ruby, stosowanych gdy linia kończy się #gitignore, stosowanych globalnie w ~/.gitconfig. Zmodyfikuj to jednak, czego potrzebujesz do swoich celów.

Uwaga!!
To pozostawia plik roboczy inny niż repo (oczywiście). Wszelkie sprawdzanie lub rebasing oznacza, że te linie zostaną utracone! Ta sztuczka może wydawać się bezużyteczna. ponieważ te linie są wielokrotnie tracone przy sprawdzaniu, rebase lub pull, ale mam konkretny przypadek użycia, aby go wykorzystać.

Po prostu git stash save "proj1-debug" podczas gdy filtr jest nieaktywny (po prostu tymczasowo wyłącz go w gitconfig lub coś w tym stylu). W ten sposób mój kod debugowania może być zawsze git stash apply'D do mojego kodu w dowolnym momencie, bez obawy, że te linie zostaną przypadkowo popełnione.

Mam pomysł na rozwiązanie tych problemów, ale spróbuję go wdrożyć w inny sposób czas.

Podziękowania dla Rudiego i jw013 za dodanie filtrów Gita i gitattributes.

 111
Author: Kache,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 19:38:24

Miałem podobny problem z pisaniem kodu java. Moim rozwiązaniem było dodanie kodu znaczników, którego nie chciałem zatwierdzać, a następnie dodanie Hooka przed zatwierdzeniem, który będzie szukał moich znaczników:

#!/bin/bash
#
# This hook will look for code comments marked '//no-commit'
#    - case-insensitive
#    - dash is optional
#    - there may be a space after the //
#
noCommitCount=$(git diff --no-ext-diff --cached | egrep -i --count "(@No|\/\/\s?no[ -]?)commit")
if [ "$noCommitCount" -ne "0" ]; then
   echo "WARNING: You are attempting to commit changes which include a 'no-commit'."
   echo "Please check the following files:"
   git diff --no-ext-diff --cached --name-only -i -G"(@no|\/\/s?no-?)commit" | sed 's/^/   - /'
   echo
   echo "You can ignore this warning by running the commit command with '--no-verify'"
   exit 1
fi
 16
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-13 19:31:10