Egy shell scriptet és a hozzá kapcsolódó állományokat szeretném felnyomni Githubra, de a következő problémába ütköztem:
Az állományok között van két skeleton mappa, amit a script a futása során bemásol a megfelelő helyre. Ez a mappa rejtett ("."-al kezdődő) néhány kilobyte-os fájlt és mappát tartalmaz, illetve egy üres 0 byte méretű normál fájlt. A Github ezeket nem hajlandó befogadni "This file is hidden" indokkal.
Én értem, hogy üres mappát és fájlt nincs értelme verziókövetni, ezért nem is lehet része a projektnek, de kényelmi és átláthatósági okokból mégis jó lenne, ha ott lennének... Ha más nem, legalább az az egy rejtett fájlt, ami nem 0 byte méretű (persze, ezt is lehetne workaroundolni, hogy kiveszem a nevéből a pontot és majd a script átnevezi a futása során, de ezt én nem tartom igényes megoldásnak).
A kérdésem, hogy ezt lehet forceolni valahogy vagy kénytelen leszek a scripten belül lekezelni a rejtett állományok létrehozását?
Hozzászólások
napi szinten adok hozzá üres rejtett fájlokat repóimhoz, amit githubon is tárolok.
touch .gitkeep && git add .gitkeep && git commit -m "Add .gitkeep" && git push
4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.
Írd le, hogy milyen eszközökkel, milyen oprendeszeren, pontosan mit csinálsz, és _pontosan_ mi a rendszer válasza! Mert így nem lehet reprodukálni a problémát. Egyébként kassaiviktorhoz csatlakozom: eddig semmi gondom nem volt soha a .-ot tartalmazó fájlok hozzáadásával. Ubuntu Linuxon, parancssorból a csomagkezelőből telepítve használom a git-et.
Windows 10, Git 2.28.0 van a gépen.
Első Git CMD indításkor beállítottam a következőket:
Ezek után (továbbra is Git CMD):
Na, ez volt tegnap. Ma vettem észre, hogy a "."-al kezdődő állományok teljes egészében hiányoznak a repoból, ezért megpróbáltam webfelület alól feltölteni ezeket, hátha a Git CMD-vel bénáztam valamit. A webfelület dobja vissza hibának, hogy "This file is hidden".
Közben létrehoztam egy development nevű branchet webfelület alól, mert ebben szeretném folytatni a munkát, illetve ha már így alakult, akkor ebben szeretném pótolni a hiányzó állományokat is.
Ezután megpróbáltam a következőket kiadni Git CMD-ben:
Igazat megvallva fogalmam sincs, hogy ez utóbbi 3 pontban egyáltalán jó-e a logikám, így kellene-e csinálni? (Nyilván nem, mert akkor nem dobna hibát.)
Lokálisan a development branchen vagy? Ha nem, akkor esélyes, hogy a masterre dolgoztál, és azért nem ment a push mert nincs ilyen lokális branched.
És tényleg! 😮
Hátha valaki tanul belőle, leírom, hogy mit csináltam.
Lehúztam egy külön mappába a development ágat:
Bemásoltam a hiányzó ".skeldir/" mappát és ".dotfile" fájlt, majd kiadtam a következő parancsokat:
Így most faszán felkerültek Githubra is a hiányzó mappák. :-) Elképzelni nem tudom, hogy legelőször miért maradtak le, mert valóban nincsen gondja velük...
Illetve még annyi, hogy a Github beállítások miatt át kellett állítanom az email címemet a
git push
előtt:---
A fentiekkel kapcsolatban lenne még kérdésem:
Mi lett volna akkor, ha a fenti két
git add
sor helyett agit add .
-ot ütöm be? Ilyenkor automatikusan észreveszi, hogy csak a bemásolt mappák/fájlok újak ("változtak meg") és a többi állományt békén hagyja commitoláskor, pusholáskor? Vagy a teljes mappaszerkezetre alkalmazta volna a commitot és frissítette volna a repóban az összes állományt?Ha egy meglévő fájlt módosítok, akkor a
git add asd.txt
-t azelőtt vagy azután kell kiadnom, hogy megváltoztatom a fájlt?Általában jó ötlet tolni egy git status-t git add és git commit előtt is (csak hogy pontosan lásd mi változott, és mi fog kommitolódni). A git add . parancs hozzá fog adni bármit, ami változott; ami nem változott, azt nyilván nem. Nézd meg előtte és utána is a git status-szal, egyértelmű lesz utána.
Amúgy git add . helyett használhatod a git add path/to/folder-t is, nem muszáj egyesével hozzáadogatni a fileokat az adott könyvtárból.
Utána. És ha add után változtatsz még rajta, akkor újra hozzá kell adni, különben csak az első változtatásaid commitolódnak (ez nem baj, ha több részletben kommitolnál egy változtatást, csak vigyázz, nehogy belefuss abba, hogy azt hitted, hogy kommitoltad az összes változást, aztán mégse). Git status használata legyen ösztönös, akkor látod, hogy mi és hova megy :) git diff --cached megmutatja a diffet, amit kommitolni fogsz.
Ha meg kihagytál valamit a kommitból, akkor sincs baj, git add file aztán git commit --amend segít. Általában jó ötlet még push előtt megejteni, mert ha amendeled a kommitot, akkor már csak force-pusholni tudsz, az meg általában bad practice (bár feature branchen általában mindegy, ha egyedül dolgozol rajta).
Szerk: git log megmutatja az adott branch kommit logját. Git show megmutatja az utolsó kommit diffjét, a git show commithash meg az adott kommit diffjét.
Csak a git add .-hoz annyit tennék hozzá, hogy a nem trackelt (vagyis új), nem ignored fileokat is hozzá fogja adni. Ha csak a módosított fileokat akarod hozzáadni, arra használható a -u kapcsoló.
Legtöbb shellhez (PS-hez is) van git status prompt, érdemes beállítani.
Továbbá git tanulásra javaslom ezt az oldalt: https://learngitbranching.js.org
Nyomom is. :)
Oktatóanyagból én még ezt találtam: Git alapismeretek. Első blikkre nagyon jó ez is, de még nem néztem végig a listát.
Kedvenc parancsom Ami kimaradt: git difftool.
És az obligát git manipulate change parancs: https://git-man-page-generator.lokaltog.net/#368d78b57e3e641c7d2fc090f8…
Jóde a difftool az csalás ;)
(én általában Idea-ban diffelek, de általában parancssorból kommitolok + egyebek).
gyerekeknek szoktam ajánlani a tig -et
apt install tig
legalapabb git segédlet ncurse alapon
4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.
Hamár curses akkor git-gui illetve gitk. Ezek mindenhol elérhetőek ahol van git (pl git for windows része).
biztos jók ezek is. de grafikusak. ezeket konzolon nem lehet használni
4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.
Igen, ezt benéztem :)
Megnézem a GUI programokat is majd, de egyelőre parancssoron van a hangsúly.
Gui-kat azert erdemes megnezni, mert azzal mrgtanulhatoak a gyakori usecase-ek, aztan annak cmd-s valtozatait kiturhatod ha tudod hogy hogy szoktal dolgozni.
Win alatt (grr) nekem sokat segitett a github desktop es a fork. Ezzel kezdtem a github karrierem, mar forkoltak es star-oltak engem :)
> Git status használata legyen ösztönös
Vagy: $ watch git status
Tehát ha jól értem, akkor egyszerűbb
git add .
-ot használni, ha sok fájlt módosítok egy huzamban, agit add file.txt
-t pedig akkor, ha csak azon az egyen dolgozok vagy ha ennek az egy fájlnak kifejezetten egy külön commit megjegyzést szeretnék megadni?Ezt megjegyzem, köszi.
A Git számára több rejtett file is speciális jelentőséggel bír, pl. .gitignore, .gitattributes, .gitmodules, .mailmap. A GitHub speciálsian kezeli a .github könyvtár tartalmát. Több CI rendszer beállításai is rejtett file-okban vannak, pl. .travis.yml, .cirrus.yml, csakúgy, mint számos programfejlesztést segítő eszközé, pl. .clang-format, .editorconfig, .tsan-suppressions.
Ezeket mindig is gond nélkük fel lehetet tölteni GitHub-ra.