Chcę pochwalić się niektórymi z moich prac, przesyłając je na moje konto GitHub. Istnieją jednak pliki zawierające hasła, na przykład połączenia z bazą danych.
Czy istnieje sposób oznaczenia pliku jako nieprzydatnego w Git, aby nie mógł pojawić się w GitHub?
.gitignore
. AFAIK nie ma w 100% pełnego dowodu na to,git
aby uniknąć zatwierdzenia określonego pliku we wszystkich przypadkach. Chociaż może to być postrzegane jako funkcja ... pozwalająca na jawne polecenia zastępujące ogólne konfiguracje.Odpowiedzi:
Po pierwsze, nie ma sposobu, aby niektóre pliki i zatwierdzenia były widoczne w lokalnym repozytorium Git, ale w jakiś sposób nie były widoczne w GitHub; jeśli masz plik zatwierdzony w Git, pojawi się w GitHub.
Po drugie, nie ma prostego i praktycznego sposobu, aby oznaczyć sam plik jako „niepospolity”. Ale jest zdecydowanie sposób na zignorowanie pliku w repozytorium Git: Dodając plik (i) - w tym ich ścieżkę względną, jeśli potrzebne - do
.gitignore
pliku :Utworzenie podstawowego
.gitignore
jest dość łatwe, ponieważ jest to zwykły plik tekstowy. Więc - na przykład - gdybym miałconfig.php
plik w twoim katalogu głównym, zrobiłbyś to; zakładając, że używasz PHP, ale koncepcja ma zastosowanie do każdej konfiguracji. Używam również Nano jako mojego edytora tekstu w tym przykładzie, ale możesz użyć dowolnego edytora tekstu, którego normalnie używasz do tego:I po prostu dodaj tę nazwę pliku do tego pliku:
Zapisz go, a teraz Git po prostu zignoruje ten plik.
To powiedziawszy, co lubię robić dla takich konfiguracji, to pozostawienie konfiguracji repozytorium próbki / przykładu neutralnej wrażliwej specyfiki w repozytorium, więc mam pewne odniesienie do tego, jaki format pliku konfiguracyjnego to plik o nazwie coś takiego:
W ten sposób wiesz dokładnie, jak
config.php
plik powinien zostać skonfigurowanyconfig.SAMPLE.php
i możesz upewnić się, żeconfig.php
Git nigdy nie dotknie faktycznego .Ponadto, jeśli planujesz pochwalić się swoim kodem, musisz spodziewać się, że ktoś spróbuje go pobrać i w jakiś sposób zaimplementować w swoim systemie. Pamiętaj, że nie jesteśmy tobą i bez przykładowego pliku konfiguracyjnego w repozytorium ludzie naprawdę nie zrozumieją, jak samodzielnie wdrożyć kod. Cholera, mogą nawet myśleć, że nie jesteś kompetentny, ponieważ nie podałeś podstawowego przykładu konfiguracji.
źródło
database_url = Environment.DATABASE_URL
i pozostawić komentarz powyżej# postgres://username:password@localhost/dbname
.Możesz także dodać hak poprzedzający zatwierdzenie, aby zaimplementować kontrolę poczytalności. Katalog
.git/hooks
każdego repozytorium git zawiera kilka przykładowych skryptów.Wywołany skrypt
pre-commit
jest wykonywany, jeśli istnieje przed każdym zatwierdzeniem, a niezerowa wartość zwrotna przerywa zatwierdzenie.Na przykład możesz mieć taki prosty skrypt:
A jeśli to
filename
pasuje, zatwierdzenie nie powiedzie się.źródło
.gitignore
jest bardzo powszechną - i powszechnie rozumianą - praktyką dla każdego, kto używa Git. Ale skrypt przed zatwierdzeniem nie jest tak naprawdę używany przez większość użytkowników Git. Wymaga pewnej wiedzy na temat instalacji i prawdziwego powodu, dla którego taka metoda byłaby lepsza niż zwykłe użycie.gitignore
pliku. Jest to jednak bardzo przydatne w niektórych bardziej skomplikowanych przypadkach, ale z pewnością jest to koncepcja, którą można zastosować, gdy naprawdę wiesz, że musisz go użyć.Co powiedział @JakeGould. W niektórych przypadkach można również użyć specjalnych bitów pliku, takich jak
skip-worktree
lub,assume-unchanged
które można ustawić w następujący sposób; różnice między nimi znajdują się w odpowiedzi na Przepełnienie stosu :Który następnie ukryje dodatkowe zmiany w już istniejącym pliku i którego możesz użyć, jeśli naprawdę chcesz, aby plik był tam po każdym ściągnięciu. Ale radziłbym ci go używać tylko wtedy, gdy naprawdę wiesz, co robisz.
źródło
Użyj
.gitignore
podobnego @JakeGould powiedział. Ponadto niektóre powiązane informacje:.gitignore
chroni pliki przed śledzeniem; jeśli są już śledzone, użyj ichgit rm --cached
do usunięcia$GIT_DIR/info/exclude
również zostaną zignorowane~/.gitconfig
również są ignorowane.Więcej informacji znajduje się w oficjalnej dokumentacji Git .
źródło
Aby rozszerzyć odpowiedzi Jake'a i 46: jedną bardzo dobrą praktyką jest posiadanie spójnego rozszerzenia, którego używasz dla plików, w których umieszczasz prywatne informacje, i
.gitignore
zawsze używaj globalnego wykluczania plików z tym rozszerzeniem (używając.gitconfig
pliku wymienionego gdzie indziej, aby zawsze był ignorowany dla użytkownika).W ten sposób możesz na przykład:
a jeśli zostałeś wykluczony
*.exc
globalnie, wiesz, że nie zostanie on popełniony, nawet jeśli zapomnisz indywidualnie wykluczyć ten konkretny plik.źródło