{"id":12472,"date":"2017-05-12T11:31:14","date_gmt":"2017-05-12T09:31:14","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12472"},"modified":"2017-05-12T11:31:14","modified_gmt":"2017-05-12T09:31:14","slug":"git-ignorare-liste-di-file-con-gitignore","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/git-ignorare-liste-di-file-con-gitignore\/","title":{"rendered":"Git: ignorare liste di file con .gitignore"},"content":{"rendered":"<p>I progetti che sottoporremo al controllo di versione operato da Git sono spesso particolarmente eterogenei. Contengono s\u00ec codice e risorse importanti ma anche molto materiale di lavoro o test che vorremmo Git non vedesse: pensiamo a file di testo con promemoria o istruzioni, file di log, cartelle di codice generato e via dicendo.<\/p>\n<p>Per fare in modo che Git semplicemente non veda e, di conseguenza, non consideri proprio specifici file o cartelle \u00e8 sufficiente inserire un file di nome <strong>.gitignore<\/strong>.<\/p>\n<p>Facciamo un esempio.<\/p>\n<p>Abbiamo predisposto una cartella con all&#8217;interno cinque file di cui due inseriti in una sottocartella. Ecco la struttura:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12473\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_01.jpg\" alt=\"git_cvs_svn_version_control_gitignore_01\" width=\"188\" height=\"137\" \/><\/a><\/p>\n<p>Sottoponiamo il tutto al controllo di git con la direttiva di inizializzazione <em>git init<\/em> e vediamo cos\u00ec apparire il nostro repository .git.<\/p>\n<p>Con il comando git status possiamo sapere cosa, a questo punto, Git &#8220;vede&#8221;:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12474\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_02.jpg\" alt=\"git_cvs_svn_version_control_gitignore_02\" width=\"313\" height=\"148\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_02.jpg 313w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_02-300x142.jpg 300w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><\/a><\/p>\n<p>Tutti i file e cartelle al momento vengono presi in considerazione dal sistema di controllo di versione.<\/p>\n<p>Creiamo un file denominato <strong>.gitignore<\/strong> dal seguente contenuto:<\/p>\n<pre class=\"lang:sh decode:true\">file04.txt<\/pre>\n<p>Editando nuovamente un il comando git status vedremo ora che git semplicemente ignorer\u00e0 la presenza di file04.txt:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12475\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_03.jpg\" alt=\"git_cvs_svn_version_control_gitignore_03\" width=\"253\" height=\"139\" \/><\/a><\/p>\n<p>Se il contenuto di .gitignore diventasse il seguente:<\/p>\n<pre class=\"lang:sh decode:true\">file04.txt\r\ndocs\/<\/pre>\n<p>vedremmo che anche la cartella docs non vedrebbe vista:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_04.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12476\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/10\/git_cvs_svn_version_control_gitignore_04.jpg\" alt=\"git_cvs_svn_version_control_gitignore_04\" width=\"266\" height=\"126\" \/><\/a><\/p>\n<p>Ci rendiamo conto cos\u00ec che Git attua delle politiche molto immediate anche per un aspetto importante come l&#8217;esclusione di determinati file.<\/p>\n<p>Le regole che possono essere scritte all&#8217;interno di .gitignore sono molte ed accettano anche espressioni regolari come le seguenti:<\/p>\n<ul>\n<li>*.txt esclude tutti i file il cui nome termina con il suffisso txt;<\/li>\n<li>docs\/**\/* tutti i file contenuti in tutte le sottocartelle di docs;<\/li>\n<li>file0[23].txt \u00e8 un modo per ignorare solo i file di nome file02.txt e file03.txt in quanto le parentesi quadre assoceranno un solo carattere del loro contenuto al resto della stringa.<\/li>\n<\/ul>\n<p>Dopo aver definito le regole di esclusione, tutto il resto del lavoro proseguir\u00e0 nella maniera consueta ma almeno saremo sicuri che saranno presi in considerazione solo ed esclusivamente i file che ci interessano davvero.<\/p>\n<p>Alla prossima lezione su Git!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I progetti che sottoporremo al controllo di versione operato da Git sono spesso particolarmente eterogenei. Contengono s\u00ec&#8230;<\/p>\n","protected":false},"author":561,"featured_media":12860,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[991,1728,1927,1723],"class_list":["post-12472","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial-pratici","tag-alternativa-a-svn","tag-git","tag-tutorial-git","tag-version-control-system"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12472","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12472"}],"version-history":[{"count":2,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12472\/revisions"}],"predecessor-version":[{"id":12501,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12472\/revisions\/12501"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/12860"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}