2012-03-20 13 views
171

Mam kilka plików w witrynie CodeIgniter, które będę chciał mieć w repozytorium, ale nie śledzić żadnych zmian.Zachowaj plik w repozytorium Git, ale nie śledź zmian

Na przykład wdrażam nową instalację tego frameworku do nowego klienta, chcę pobrać następujące pliki (mają one wartości domyślne CHANGEME) i muszę po prostu wprowadzić zmiany specyficzne dla tego klienta (poświadczenia bazy danych, informacje o adresie e-mail, niestandardowy arkusz CSS).

// the production config files i want the files but they need to be updated to specific client needs 
application/config/production/config.php 
application/config/production/database.php 
application/config/production/tank_auth.php 
// index page, defines the environment (production|development) 
/index.php 
// all of the css/js cache (keep the folder but not the contents) 
/assets/cache/* 
// production user based styling (color, fonts etc) needs to be updated specific to client needs 
/assets/frontend/css/user/frontend-user.css 

Obecnie jeśli biegnę

git clone [email protected]:user123/myRepo.git httpdocs 

a następnie edytować pliki powyżej, wszystko jest świetnie. Do czasu wydania poprawki lub poprawki i uruchomienia git pull. Wszystkie moje zmiany zostaną nadpisane.

+2

możliwe duplikat z [Git: Plik, który musi zostać rozprowadzony, ale zignorowany/nie może zostać ponownie załadowany?] (http://stackoverflow.com/questions/5586267/git-file-that-must-be-distributed-but-ignored-not-reuploaded) – Daenyth

+2

możliwy duplikat [git: czy mogę zatwierdzić plik i zignorować zmiany treści ?] (http://stackoverflow.com/questions/3319479/git-can-i-commit-a-file-and-ignore-the-content-changes) – CharlesB

+0

Możliwy duplikat [git: czy mogę zatwierdzić plik i ignorować zmiany zawartości?] (http://stackoverflow.com/questions/3319479/git-can-i-commit-a-file-and-ignore-the-content-changes) –

Odpowiedz

45

Dla moich projektów codeigniter, trzymam database.php.example i config.php.example w repo.

Następnie dodaję config.php i aplikacje/config/database.php do pliku .gitignore.

W końcu, po wdrożeniu mogę skopiować pliki .example (do config.php i database.php), dostosować je i nie będą one śledzone przez GIT.

+9

Ładne rozwiązanie, ale myślę, że odpowiedź nasirkhan jest najlepsza. – wordsforthewise

+0

To nie jest dobre rozwiązanie. Jeśli opróżnisz swój indeks git, zaczniesz śledzić zmiany, kiedy nie chcesz. Zobacz odpowiedź @nasirkhans, aby dowiedzieć się, jak to zrobić. –

+1

Nie zgadzam się z obydwoma poprzednimi komentarzami. W ten sposób znacznie łatwiej jest zaktualizować "domyślne" wartości bez konieczności sprawdzania ich i kopiowania lokalnej konfiguracji w innym miejscu, aby później ją ponownie umieścić. Dotyczy to również wszystkich repozytoriów, dzięki czemu nie trzeba wykonywać żadnych powtórnych zmian repozytoriów. – OskarD90

2

Umieściłbym je w twoim pliku .gitignore i po prostu skopiuj je ręcznie w razie potrzeby.

Tak więc nazwa szkieletu byłaby w git, ignorowane nazwy plików nie byłyby w git (ale byłyby w .gitignore). W ten sposób, gdy zrobimy krok ręczny, aby skopiować je do "rzeczywistego" z "szablonu" (lepsze może być imię niż szkielet), są one natychmiast ignorowane.

+0

nie ma sposobu, aby dodać je do repo, a następnie dodać je do .gitignore? Byłoby świetnie, gdyby istniało rozwiązanie, które pozwoliłoby na uwzględnienie plików, ale żadnych zmian po pewnym zatwierdzeniu lub czymś podobnym. – gorelative

+1

@kklauber Chcę je przechowywać w nieskończoność, dopóki nie uruchomię 'git rm '. Celem jest IE: plik config.php. Chcę zachować plik konfiguracyjny, ale oczywiście nie chcę śledzić referencji bazy danych od klienta do klienta, ponieważ są różne. – gorelative

+1

Tak, mam problem z plikiem rails database.yml. Trzymamy szkielet, a następnie go kopiujemy i zmieniamy. –

380

git ma inne rozwiązanie, aby to zrobić. Najpierw zmienić plik, który nie chce być śledzone i użyć następującego polecenia:

git update-index --assume-unchanged FILE_NAME 

i jeśli chcesz śledzić zmiany ponownie użyć tego polecenia:

git update-index --no-assume-unchanged FILE_NAME 

git-update-index documentation

+0

Zrobiłem to, co mówisz, ale status gita mówi, że plik jest zmodyfikowany – rraallvv

+0

Działa dobrze dla mnie. Czy podczas próby pojawił się komunikat "Nie można oznaczać pliku ..."? – shim

+0

Działa tutaj - w końcu moje dwustopniowe wdrażanie nie spowoduje stałych nieudanych zmian. DZIĘKUJĘ @nasirkhan !!! –

Powiązane problemy