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?
- 903 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
Í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.
- A hozzászóláshoz be kell jelentkezni
Windows 10, Git 2.28.0 van a gépen.
- Webfelületen létrehoztam egy repot.
Első Git CMD indításkor beállítottam a következőket:
- git config --global user.email "my@emailaddr.com"
- git config --global user.name "myusername"
- ssh-keygen -t rsa -C "my@emailaddr.com"
- ssh -T git@github.com (válasz: "Hi myusername! You've successfully authenticated, but GitHub does not provide shell access.")
Ezek után (továbbra is Git CMD):
- cd D:\projekt\eleresi\utvonala
- git init
- git remote add origin https://github.com/myrepo/myproject.git
- git push origin master
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:
- git add .
- git commit -m "Missing dot files added."
- git push origin development (Válasz: "error: failed to push some refs to 'https://github.com/myrepo/myproject.git'")
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.)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
É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:
- cd D:\projekt\eleresi\utvonala-development
- git init
- git remote add origin https://github.com/myrepo/myproject.git
- git pull origin development
- git checkout development
Bemásoltam a hiányzó ".skeldir/" mappát és ".dotfile" fájlt, majd kiadtam a következő parancsokat:
- git add .skeldir
- git add .dotfile
- git commit -m "Missing dot files added."
- git push origin development
Í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:
- git config --global user.email "ID+MYUSERNAME@users.noreply.github.com"
- git commit --amend --reset-author
---
A fentiekkel kapcsolatban lenne még kérdésem:
Mi lett volna akkor, ha a fenti két git add
sor helyett a git 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?
- A hozzászóláshoz be kell jelentkezni
Á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.
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?
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Kedvenc parancsom Ami kimaradt: git difftool.
És az obligát git manipulate change parancs: https://git-man-page-generator.lokaltog.net/#368d78b57e3e641c7d2fc090f8…
- A hozzászóláshoz be kell jelentkezni
Jóde a difftool az csalás ;)
(én általában Idea-ban diffelek, de általában parancssorból kommitolok + egyebek).
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Hamár curses akkor git-gui illetve gitk. Ezek mindenhol elérhetőek ahol van git (pl git for windows része).
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Igen, ezt benéztem :)
- A hozzászóláshoz be kell jelentkezni
Megnézem a GUI programokat is majd, de egyelőre parancssoron van a hangsúly.
- A hozzászóláshoz be kell jelentkezni
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 :)
- A hozzászóláshoz be kell jelentkezni
> Git status használata legyen ösztönös
Vagy: $ watch git status
- A hozzászóláshoz be kell jelentkezni
Tehát ha jól értem, akkor egyszerűbb git add .
-ot használni, ha sok fájlt módosítok egy huzamban, a git 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?
Á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.
Ezt megjegyzem, köszi.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni