Git érzékeny adatok kihagyása commit esetén

 ( redman | 2017. augusztus 8., kedd - 9:49 )

Sziasztok,

Van egy kód (egy fájlban), amit szeretnék a gitHubra feltenni.
Ebben a fájlban vannak érzékeny adatok is: domain, jelszó, port stb.

Lehet-e a git-re való commit előtt ezeket on-demand kicserélni mondjuk *-ra? Windows, illetve Linux kliensen.
A fejlesztés korai szakaszában vagyok, így jó lenne azt a kódot futtatni, amin dolgozom.

Amivel meg lehet oldani, de szeretnék elkerülni:
- külső config file és .gitignore, mert ez egy arduino project, amiben a külső fájl használata macerás (tudom nem annyira, de ha ez egyszerűbb, akkor jobb lenne.)
- fejlesztés, majd bemásolás a git repositoryba, majd commit, mert el akarom kerülni a kód duplikálást

Köszi előre is a válaszokat!

Üdv: redman

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Szerintem git pre-commit hook-ot keresed. https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks.

Mi ilyen esetben amugy mindig .gitignore-t hasznalunk inkabb, mert sokkal tisztabb es atlathatobb mint a hook, meg egyeb varazslatok. Van egy mondjuk gradle build file, es kulon van egy credentials. A build file hivatkozza a credentials tartalmat, onnan olvassa ki felhasznalonve/jelszot. A cerdentials kerul csak a .gitignore-ba. Igy nem fogod commitolni az adataid.

+1

+1 a .gitignore-ra.

+1. A commit hook nem a repó része, hanem a user telepíti - ha nem felejti el. Illetve könnyű elrontani a szkriptet úgy, hogy ne fusson le, de ne is adjon hibakódot. Vagy fél év múlva nem tudsz kommittolni, és kezdheted debuggolni a szkriptet, ami egyáltalán nem triviális akkor már, hogy ott van egyáltalán. A .gitignore egyszerűbb és biztosabb.

Tegyük fel, hogy felmegy a git-re egy password file üres adatokkal.
Utána már nem lehet .gitignore-t használni, hiba van benne a fájlnév, a módosított adatokat fel fogja tölteni. (legalábbi legutóbb így jártam)

Erre az lehet a megoldás, hogy "config.conf.template" fájlt töltök fel és a használt "config.conf" fájlt pedig ignorálom.
Így használjátok?

http://www.redphoto.hu

igen
--
blogom

"Tegyük fel, hogy felmegy a git-re egy password file üres adatokkal.
Utána már nem lehet .gitignore-t használni, hiba van benne a fájlnév, a módosított adatokat fel fogja tölteni. (legalábbi legutóbb így jártam)
"

Lásd man gitignore első két mondata:

"A gitignore file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected;"

Oké, mondjuk úgy, hogy kezdő vagyok a git-ben még

http://www.redphoto.hu

miert a source konyvtarban van a hasznalt konfig? Nem inkabb a ${sysconfdir} ala kene tenni?

--
t-systems-es it architect allast keres. Jelige: csak webshopot ne kelljen...

A smudge és clean filter-ek valók ilyesmire, de nekem nem sikerült még működésre bírnom.

Elso tippem a BFG Repo-Cleaner lenne (https://rtyley.github.io/bfg-repo-cleaner/):
Replace all passwords listed in a file (prefix lines 'regex:' or 'glob:' if required) with ***REMOVED*** wherever they occur in your repository :
bfg --replace-text passwords.txt my-repo.git

Adatot és kódot nem keverünk, pláne nem drótozunk be szenzitív adatot a binárisba.
Én a "másik oldalról" közelíteném meg a kérdést - a repóba kerülő fájlba egy dummy user/jelszó párost raknék, a build során cserélném le a saját adatokra, ha már mindenképp bedrótozva kéne (ez lehetne jól irányzott sed, de akár -DRealPW=ezajelszo jellegű mókolás is, már ha a fordító támogat ilyesmit...)

rakd ki környezeti változóba az adatokat és egy futtató script/wrapper-el add át. a legtöbb fejlesztőkörnyezetben is be tudod őket állítani..

+1

Annyit tennék a fentiekhez, hogy egy fájlból nem elég kivenni az érzékeny adatot commit előtt, eleve soha ne legyen ott. Attól, hogy te commit előtt automatikusan kiveszed, még a többi ember, aki letölti, szívni fog vele. (Vagy ha nem akarod, hogy más letöltse, akkor ne is GitHub-ra tedd.) Legyen egy config.h.minta a repóban, és config.h valós értékekkel, ami ignorálva van. Vagy olvasd környezeti változóból. Vagy bármi.

+1

+1

kicsit off, de maven3 és IDEA alapon tud erre valaki rendes megoldást?

ami cél, hogy a `mvn clean install && mvn jetty:run -pl frontend` lefusson, minden egyéb paraméterezés nélkül.
továbbá ha felveszem az IDEA-ba a pom.xml-t, akkor a goalokat onnan is tudjam futtatni, minden egyéb extra nélkül.

én eddig két dolgot találtam/próbáltam:
- projektenként külön-külön settings.xml - viszont ezt nem tudom a pom-ban megadni (tudtommal), így a parancssorban kell mindig, egyesével
- vagy a properties maven plugint, de azt meg az idea nem komálta..
--
blogom

pl.:
config/config.inc.php.dist <- ez megy a kommitbe
config/config.inc.php <- ez ignore

a megoldas egy konfig file, amit az alkalmazas hasznal. Kodba max. a default adatok mennek, pl. admin:admin, etc. De ahogy fentebb is irtak, site specifikus adatokat miert akarsz egy publikus repo-ba feltenni? Mire megy egy user, aki letolti a cuccodat, a te hosztneveddel, jelszavaddal, etc?

- külső config file és .gitignore, mert ez egy arduino project, amiben a külső fájl használata macerás

mar miert is, mi koze a 2-nek egymashoz? Egyszer beallitod a konfig file-t, es utana az app frissitesei azt nem bantjak.

--
t-systems-es it architect allast keres. Jelige: csak webshopot ne kelljen...

A fenti valóban jótanácsok mellett legyen néhány fitying privát git repora (akár fizetős github akár egy 300 forintos vps képében).
Minimális tudással fel lehet húzni egy privát gitblitet vagy gitlabet.

--
arch,debian,retropie,osmc,android,windows

7usd: https://github.com/pricing / bitbucket : ingyen

Egyreszt gitignore (vagy lehet egy directoryval feljebb) a config.
Masreszt, ha mar Arduino: nem lenne jobb az IC EEPROM-ba beirni a configot, es onnan hasznalni? Az pont a beallitasokra van.

Pl. csinalsz egy programot, ami soros terminalon bekeri az erzekeny adataidat, es eltarolja magan az IC-n. Aztan megirod azt a programot, amit fejlesztesz. Ez mar az EEPROM-on tarolt adatokat hasznalja. Mindket programot feltoltheted a netre, nincs benne jelszo.

Egy fuse flag-et engedelyezni kell hozza, ezt meg ellenorizd le hogy all:
Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]
(Atmega328P-Atmega8 es tarsain)

--
Worrying about killer AI and the superintelligent robots is like worrying about overcrowding on Mars. - Garry Kasparov

Én nem tennék konfigurációs adatokat a forrásba.

Nem ismerem az arduino platformot, ha a konfig fájlt nem tudja kezelni, akkor valami más módon oldanám meg (futtatáskor bemenő paraméter: script átadja neki, projekt buildeléskor a build program felolvassa a konfig fájlból és mondjuk bemásolja a kód közepébe, ahová kell, stb).