Git kezdő: Mit kezdjek a ponttal kezdődő fájlokkal és mappákkal?

Fórumok

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.

  • Webfelületen létrehoztam egy repot.

Első Git CMD indításkor beállítottam a következőket:

  1. git config --global user.email "my@emailaddr.com"
  2. git config --global user.name "myusername"
  3. ssh-keygen -t rsa -C "my@emailaddr.com"
  4. 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):

  1. cd D:\projekt\eleresi\utvonala
  2. git init
  3. git remote add origin https://github.com/myrepo/myproject.git
  4. 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:

  1. git add .
  2. git commit -m "Missing dot files added."
  3. 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.)

É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:

  1. cd D:\projekt\eleresi\utvonala-development
  2. git init
  3. git remote add origin https://github.com/myrepo/myproject.git
  4. git pull origin development
  5. git checkout development

Bemásoltam a hiányzó ".skeldir/" mappát és ".dotfile" fájlt, majd kiadtam a következő parancsokat:

  1. git add .skeldir
  2. git add .dotfile
  3. git commit -m "Missing dot files added."
  4. 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:

  1. git config --global user.email "ID+MYUSERNAME@users.noreply.github.com"
  2. 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?

Á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.

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

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 :) 

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 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.