{"id":28533,"date":"2019-06-04T00:00:00","date_gmt":"2019-06-03T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28533"},"modified":"2021-05-20T20:16:05","modified_gmt":"2021-05-20T18:16:05","slug":"versionare-i-pacchetti-nuget-con-gitflow-e-semver","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/","title":{"rendered":"Versionare i pacchetti Nuget con GitFlow e SemVer"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28534\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/attachment\/2581135c-7fb2-49ea-8a04-1feaa640162c\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2581135c-7fb2-49ea-8a04-1feaa640162c\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28534\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nel precedente articolo abbiamo visto come poter versionare i nostri pacchetti Nuget tramite l&#8217;uso di alcune classi come&nbsp;<em>AssemblyInfo.cs<\/em>. Seguendo questa tipologia di versionamento nella nostra azienda non abbiamo avuto grosse difficolt\u00e0, anche se con l&#8217;adozione di Git ci siamo chiesti se ci fosse un modo migliore per strutturare il nostro lavoro e di conseguenza il processo di versionamento. Per tale motivo abbiamo esaminato le diverse&nbsp;<em>branching strategies<\/em>&nbsp;che si usano con git, e l&#8217;approccio che abbiamo trovato pi\u00f9 adatto alle nostre esigenze \u00e8 stato quello di&nbsp;<strong><a href=\"https:\/\/nvie.com\/posts\/a-successful-git-branching-model\/\" target=\"_blank\" rel=\"noreferrer noopener\">GitFlow<\/a><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"lapproccio-gitflow\">L&#8217;approccio GitFlow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In sostanza GitFlow consente di dare un significato semantico ai branch di git in relazione a ci\u00f2 su cui si\u00a0sta lavorando. Ad esempio, se stiamo sviluppando su un branch\u00a0<em>feature<\/em>, sappiamo di lavorare su una nuova feature da includere nella prossima release del nostro software. Di seguito una overview di GitFlow:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" data-attachment-id=\"28536\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/attachment\/1-2-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1-2.png?fit=1344%2C723&amp;ssl=1\" data-orig-size=\"1344,723\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"1-2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1-2.png?fit=1024%2C551&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1-2.png?resize=1024%2C551&#038;ssl=1\" alt=\"\" class=\"wp-image-28536\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/1-2-980x527.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/1-2-480x258.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption><em>Overview di GitFlow<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In GitFlow abbiamo due&nbsp;branch che vengono definiti come&nbsp;<em>principali<\/em>&nbsp;o&nbsp;<em>storici<\/em>&nbsp;e che esisteranno per tutta la vita del nostro repository. Questi branch sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>master<\/strong>: contiene l&#8217;insieme delle release che abbiamo creato per il nostro software. I commit hanno origine dai branch di release o di hotfix prima di essere uniti a questo (merge);<\/li><li><strong>develop<\/strong>: contiene le integrazioni necessarie per il prossimo rilascio, e da cui partono i nuovi branch di release. I commit di questo repository hanno origine dai branch di feature.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Insieme a questi branch, troviamo poi branch che hanno mediamente vita breve:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>feature<\/strong>: racchiudono l&#8217;insieme delle nuove funzionalit\u00e0 da integrare nella prossima release. Nascono e vengono uniti al termine dello sviluppo della funzionalit\u00e0 con il branch develop;<\/li><li><strong>release<\/strong>: racchiudono l&#8217;insieme delle feature che faranno parte della prossima release. I branch nascono da develop, e saranno uniti sia a master che a develop (a seguito delle fix sul branch stesso). I branch di release saranno inoltre&nbsp;<strong>taggati<\/strong>&nbsp;un attimo prima del merge con master e develop;<\/li><li><strong>hotfix<\/strong>: racchiudono l&#8217;insieme delle fix che sono effettuate sul codice di produzione. I branch nascono da master e saranno uniti sia a master che a develop.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Da queste informazioni emerge un aspetto importante di GitFlow:&nbsp;<strong>l&#8217;esistenza di&nbsp;strette correlazioni fra i diversi branch<\/strong>. Possiamo considerare ci\u00f2 un punto di forza di questo approccio, anche se in alcuni casi lo possono far sembrare un po&#8217; troppo laborioso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un aspetto che invece ne favorisce l&#8217;adozione \u00e8 l&#8217;ottima integrazione con i tool di sviluppo che usiamo. Possiamo infatti utilizzare GitFlow sia in Visual Studio (anche Code) oppure usare la comodissima CLI. Inoltre, alcuni client Git come&nbsp;<a href=\"https:\/\/www.sourcetreeapp.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>SourceTree<\/strong><\/a>&nbsp;o&nbsp;<a href=\"https:\/\/git-fork.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Fork<\/strong><\/a>&nbsp;lo includono gi\u00e0 tra le proprie funzionalit\u00e0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo un breve esempio di utilizzo di GitFlow tramite la CLI, partendo dall&#8217;implementazione di una feature e terminando con il suo rilascio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il primo passo \u00e8 quello di inizializzare il repository con il comando&nbsp;<code>git flow init<\/code>: questo comando, tramite la richiesta di alcune informazioni, configura il repository e i nomi dei branch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ora siamo pronti per creare la nostra prima feature: il comando&nbsp;<code>git flow feature start &lt;nomeFeature&gt;<\/code>&nbsp;crea&nbsp;un nuovo branch di feature in cui andremo a sviluppare le nuove funzionalit\u00e0 da integrare nel nostro progetto. Terminata questa fase, possiamo unire le nuove modifiche con il branch develop usando il comando&nbsp;<code>git flow feature finish &lt;nomeFeature&gt;<\/code>. Questa operazione, oltre ad aggiornare develop, elimina anche il nostro branch di feature perch\u00e9 non \u00e8 pi\u00f9 necessario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel momento in cui siamo pronti per rilasciare una nuova versione del nostro software:&nbsp;<code>git flow release start &lt;numero_release&gt;<\/code>. Questo comando crea un nuovo branch di release che sar\u00e0 destinato principalmente al testing e conterr\u00e0 bugfix in caso di problemi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;ultimo passo \u00e8 quello di rilasciare il prodotto e unire tutte le modifiche al branch master. Il comando da utilizzare \u00e8&nbsp;<code>git flow release finish &lt;numero_release&gt;<\/code>, che effettua molteplici operazioni:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>merge verso master;<\/li><li>tag della release con il proprio nome;<\/li><li>back-merge verso develop;<\/li><li>rimozione del branch di release.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" data-attachment-id=\"28539\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/attachment\/2-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2-3.png?fit=1344%2C723&amp;ssl=1\" data-orig-size=\"1344,723\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2-3.png?fit=1024%2C551&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2-3.png?resize=1024%2C551&#038;ssl=1\" alt=\"\" class=\"wp-image-28539\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/2-3-980x527.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/2-3-480x258.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption><em>Release Flow con GitFlow<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con questi semplici passi, e grazie all&#8217;ottima integrazione con la CLI, siamo in grado di creare un processo di sviluppo ben definito in maniera molto intuitiva.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A tal punto potrebbe per\u00f2 sorgere una domanda: in questo processo come stabiliamo il numero di versione associato al nome della branch di release? E pi\u00f9 in generale, possiamo usare lo stesso numero per definire anche i branch &#8220;intermedi&#8221; che useremo per integrare le nuove release? La risposta a queste domande \u00e8&nbsp;<strong>SemVer<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GitFlow \u00e8 accostato spesso al concetto di versionamento semantico. Offre cio\u00e8 un insieme di regole che rendono semplice il versionamento di branch che hanno gi\u00e0 un proprio significato all&#8217;interno del processo di lavoro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ladozione-di-semver-e-gitversion\">L&#8217;adozione di SemVer e GitVersion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a rel=\"noreferrer noopener\" href=\"https:\/\/semver.org\/\" target=\"_blank\">SemVer<\/a>\u00a0aiuta a definire il versionamento del software grazie ad una serie di regole basate su 3 numeri:\u00a0<strong>major, minor e patch<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"504\" data-attachment-id=\"28542\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/attachment\/3-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/3-3.png?fit=1776%2C874&amp;ssl=1\" data-orig-size=\"1776,874\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"3-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/3-3.png?fit=1024%2C504&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/3-3.png?resize=1024%2C504&#038;ssl=1\" alt=\"\" class=\"wp-image-28542\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/3-3-980x482.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/3-3-480x236.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption><em>I principali numeri di SemVer<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Come si evince dall&#8217;immagine, ogni numero viene incrementato a seconda di quale modifica stiamo effettuando all&#8217;interno del nostro software. L&#8217;aspetto interessante \u00e8 che, oltre a questi numeri, possiamo prevedere anche la presenza di\u00a0<em>release intermedie<\/em>\u00a0per differenziare quelle\u00a0che provengono da branch diversi dal master:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"378\" height=\"128\" data-attachment-id=\"28544\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/attachment\/4-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/4-3.png?fit=378%2C128&amp;ssl=1\" data-orig-size=\"378,128\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"4-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/4-3.png?fit=378%2C128&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/4-3.png?resize=378%2C128&#038;ssl=1\" alt=\"\" class=\"wp-image-28544\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/4-3.png?w=378&amp;ssl=1 378w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/4-3.png?resize=300%2C102&amp;ssl=1 300w\" sizes=\"auto, (max-width: 378px) 100vw, 378px\" \/><figcaption><em>Pre-release e metadati in SemVer<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Questi numeri, e in particolare le sezioni di pre-release e metadati, possono essere generati in base al branch che prendiamo in considerazione e favoriscono i processi di automazione e il testing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seguendo le regole relative ai branch che abbiamo visto in GitFlow e compreso il funzionamento di SemVer per avere nuovi numeri di versione, possiamo standardizzare il processo di assegnazione di un nuovo numero di release. A venirci in aiuto \u00e8 un tool che si chiama&nbsp;<a href=\"https:\/\/gitversion.readthedocs.io\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>GitVersion<\/strong><\/a>. Si tratta di uno strumento da riga di comando che ci consente, in base alla storia del nostro repository e al branch in cui ci troviamo, di generare il prossimo numero di versione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Su Windows l&#8217;installazione \u00e8 semplice grazie all&#8217;uso di&nbsp;<a href=\"https:\/\/chocolatey.org\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Chocolatey<\/strong><\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il comando\u00a0<code>gitversion init<\/code>\u00a0avvia un wizard di inizializzazione che ci guida con una serie di domande sulla scelta del\u00a0versionamento che ci occorre. Scelto l&#8217;approccio GitFlow, salviamo al termine del wizard la configurazione\u00a0<code>gitversion.yml<\/code>\u00a0che sar\u00e0 presente all&#8217;interno del repository e aiuter\u00e0 la gestione delle versioni. A tal punto, per generare il successivo numero di versione baster\u00e0 eseguire\u00a0<code>gitversion<\/code>\u00a0nella console e comparir\u00e0 un payload JSON che racchiude una serie di informazioni e il prossimo numero di versione in diversi formati:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"731\" data-attachment-id=\"28546\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/attachment\/5-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/5-3.png?fit=2036%2C1454&amp;ssl=1\" data-orig-size=\"2036,1454\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"5-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/5-3.png?fit=1024%2C731&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/5-3.png?resize=1024%2C731&#038;ssl=1\" alt=\"\" class=\"wp-image-28546\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/5-3-980x700.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/5-3-480x343.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption><em>Un esempio di output di GitVersion<\/em><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nell&#8217;ottica di versionare i nostri pacchetti Nuget, la propriet\u00e0 da dover prendere in considerazione per il prossimo valore da inserire nell&#8217;AssemblyInfo.cs \u00e8&nbsp;<strong>NugetVersionV2<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nasce per\u00f2 un problema: nel precedente articolo, abbiamo utilizzato\u00a0<code>AssemblyVersion<\/code>\u00a0e\u00a0<code>AssemblyFileVersion<\/code>\u00a0per versionare i nostri pacchetti. Se il nostro numero di versione contiene dei metadati come ad esempio\u00a0<code>alpha<\/code>, questi attributi non vanno pi\u00f9 bene! Il problema nasce dal fatto che questi due attributi non accettano caratteri ma solo numeri. Per tal motivo occorre usare un attributo compatibile SemVer chiamato\u00a0<code>AssemblyInformationalVersion<\/code>. In questo modo, dopo aver creato il pacchetto Nuget con i numeri generati da GitVersion, troviamo anche la parte di pre-release o di metadati compatibile con SemVer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"502\" data-attachment-id=\"28549\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/attachment\/6-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/6-3.png?fit=1716%2C842&amp;ssl=1\" data-orig-size=\"1716,842\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"6-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/6-3.png?fit=1024%2C502&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/6-3.png?resize=1024%2C502&#038;ssl=1\" alt=\"\" class=\"wp-image-28549\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/6-3-980x481.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/6-3-480x236.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><figcaption><em>L&#8217;attributo AssemblyInformationVersion<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"qual\u00e8-il-prossimo-passo\">Qual \u00e8 il prossimo passo?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dopo aver stabilito un processo ben consolidato e adottato GitFlow, SemVer e GitVersion, il passo successivo \u00e8 quello di automatizzare l&#8217;intera procedura tramite l&#8217;uso di una pipeline di Continuous Deployment. Nel prossimo articolo, vedremo come possiamo&nbsp;farlo con Azure DevOps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"link-utili\">Link utili<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La nascita di GitFlow:&nbsp;<a href=\"https:\/\/nvie.com\/posts\/a-successful-git-branching-model\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/nvie.com\/posts\/a-successful-git-branching-model\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uso di GitFlow step-by-step:&nbsp;<a href=\"https:\/\/danielkummer.github.io\/git-flow-cheatsheet\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/danielkummer.github.io\/git-flow-cheatsheet\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uso e configurazione di GitVersion:&nbsp;<a href=\"https:\/\/gitversion.readthedocs.io\/en\/latest\/configuration\/#configuration\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/gitversion.readthedocs.io\/en\/latest\/configuration\/#configuration<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diversi workflow per git:\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/comparing-workflows\" target=\"_blank\">https:\/\/www.atlassian.com\/git\/tutorials\/comparing-workflows<\/a><\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Proseguiamo il viaggio nel versionamento del codice aggiungendo i tool GitFlow e SemVer<\/p>\n","protected":false},"author":196716243,"featured_media":28534,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637539,688637442,688637441],"class_list":["post-28533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-devops-it","tag-raptor","tag-webright"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Versionare i pacchetti Nuget con GitFlow e SemVer - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Versionare i pacchetti Nuget con GitFlow e SemVer - Blexin\" \/>\n<meta property=\"og:description\" content=\"Proseguiamo il viaggio nel versionamento del codice aggiungendo i tool GitFlow e SemVer\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-03T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-20T18:16:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Antonio Liccardi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Liccardi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/\"},\"author\":{\"name\":\"Antonio Liccardi\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/e1e90a04ec265b5c0712c5918ba01e8d\"},\"headline\":\"Versionare i pacchetti Nuget con GitFlow e SemVer\",\"datePublished\":\"2019-06-03T22:00:00+00:00\",\"dateModified\":\"2021-05-20T18:16:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/\"},\"wordCount\":1273,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"DevOps\",\"Raptor\",\"Webright\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/\",\"name\":\"Versionare i pacchetti Nuget con GitFlow e SemVer - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-06-03T22:00:00+00:00\",\"dateModified\":\"2021-05-20T18:16:05+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/e1e90a04ec265b5c0712c5918ba01e8d\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Versionare i pacchetti Nuget con GitFlow e SemVer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/e1e90a04ec265b5c0712c5918ba01e8d\",\"name\":\"Antonio Liccardi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21b389ff00d1ab0b0721987c7aa5e16c34a1a5a8b774bfd4125507ea14f7ecce?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21b389ff00d1ab0b0721987c7aa5e16c34a1a5a8b774bfd4125507ea14f7ecce?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21b389ff00d1ab0b0721987c7aa5e16c34a1a5a8b774bfd4125507ea14f7ecce?s=96&d=identicon&r=g\",\"caption\":\"Antonio Liccardi\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/antonio-liccardiblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Versionare i pacchetti Nuget con GitFlow e SemVer - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/","og_locale":"it_IT","og_type":"article","og_title":"Versionare i pacchetti Nuget con GitFlow e SemVer - Blexin","og_description":"Proseguiamo il viaggio nel versionamento del codice aggiungendo i tool GitFlow e SemVer","og_url":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/","og_site_name":"Blexin","article_published_time":"2019-06-03T22:00:00+00:00","article_modified_time":"2021-05-20T18:16:05+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Antonio Liccardi","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Antonio Liccardi","Tempo di lettura stimato":"6 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/"},"author":{"name":"Antonio Liccardi","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/e1e90a04ec265b5c0712c5918ba01e8d"},"headline":"Versionare i pacchetti Nuget con GitFlow e SemVer","datePublished":"2019-06-03T22:00:00+00:00","dateModified":"2021-05-20T18:16:05+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/"},"wordCount":1273,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1","keywords":["DevOps","Raptor","Webright"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/","url":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/","name":"Versionare i pacchetti Nuget con GitFlow e SemVer - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1","datePublished":"2019-06-03T22:00:00+00:00","dateModified":"2021-05-20T18:16:05+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/e1e90a04ec265b5c0712c5918ba01e8d"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/versionare-i-pacchetti-nuget-con-gitflow-e-semver\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Versionare i pacchetti Nuget con GitFlow e SemVer"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/e1e90a04ec265b5c0712c5918ba01e8d","name":"Antonio Liccardi","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/21b389ff00d1ab0b0721987c7aa5e16c34a1a5a8b774bfd4125507ea14f7ecce?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/21b389ff00d1ab0b0721987c7aa5e16c34a1a5a8b774bfd4125507ea14f7ecce?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21b389ff00d1ab0b0721987c7aa5e16c34a1a5a8b774bfd4125507ea14f7ecce?s=96&d=identicon&r=g","caption":"Antonio Liccardi"},"url":"https:\/\/blexin.com\/it\/author\/antonio-liccardiblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/2581135c-7fb2-49ea-8a04-1feaa640162c.png?fit=1024%2C608&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7qd","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716243"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28533"}],"version-history":[{"count":5,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28533\/revisions"}],"predecessor-version":[{"id":28552,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28533\/revisions\/28552"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/28534"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}