Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:Source Control - Git

From Aino Wiki

Jump to: navigation, search

Tra i migliori SCM (source control manager) svetta GIT che ora è integrato in Visual Studio

Panoramica su GIT

Due piattaforme GIT per il repository del codice sorgente in remoto sono GitHub e BitBucket.

Protocolli

Come fare

Con Git ci sono 2 possibilità su come conservare il proprio codice sorgente:

  • in remoto (sul Cloud GitHub o proprio server), vedere sotto "Git remote server";
  • oppure in Locale.

Git remote Server

Si descrive come configurare un Windows Git server centralizzato verso cui far convergere gli sviluppatori che collaborano su diversi progetti (Git on the Server).
NOTA Git non è nato per avere una gestione centralizzata ma distribuita ma in una azienda in cui i dipendenti possono essere dislocati non in unico posto fisico può essere necessario che ci sia un server che faccia da repository condiviso e gestito\protetto centralmente.
In questa soluzione si userà IIS ed il protocollo HTTP come tramite per intercettare le richieste dai client sull'archivio Git gestito centralmente sul server. (Ci sono altre solizioni alternative a IS e basate su altri protocolli come Local FS, Secure Shell (SSH) e Git)

1. Installazione di GIT

Git (Attualmente ver 2.44.0) per Windows scaricabile qui: git-scm.com. Doc: Book Al termine saranno disponibili le seguenti app.

Git Installazione 01.png

Qui si fa riferimento all'uso di Git CMD.

2. Creare la cartella di Repository

Si crea la cartella sul FileSystem, ad es., D:\Git_Repository
Ogni progetto sarà una cartella che Git provvedera a collocare all'interno della cartella di prima chiamandola "Bare Repository".
Se si configurerà IIS, al punto 6., per interfacciarsi con Git usando una "Applicazione Web", la root repository fisica dei progetti ospitati su Git sarà una sottocartella ovvero D:\Git_Repository\Git_IIS dove "Git_IIS" è il nome della Applicazione Web che installeremo al punto 6.

3. Creare gli utenti locali al Server e che corrisponderanno ai client remoti

Si crea uno "Standard User" di test, ad es. GitUser1 da utilizzare da un client remoto per testare il server. Disabilitargli l'uso del Remote Desktop (andare su Remote Desktop Services Profile e checcare "Deny this user permissions to log on to Remote Desktop Session Host").
A questi utenti si aggiungerà un utente locale particolare IIS_IUSERS, necessario se al passo dell'installazione dell'applicazione web su IIS si sceglie di NON installarla nella cartella di default C:\inetpub\wwwroot.

Git permessi utente IIS al FS 02.png

Per una questione di sicurezza sarebbe opportuno disabilitare l'utente dalla possibilità di utilizzare il Remote Desktop.

4. Configurazione utente locale al Server

Si assegna all'utente "GitUser1" il permesso full Control alla cartella del repository di Git creata allo Step 2 D:\Git_Repository

Git permessi utente al FS 00.png
Git permessi utente al FS 01.png


5. Impostazione del Git repository

Ci sono due tipologie di repository:

  • Repository "non-bare", Standard, destinato ad accoglere un singolo progetto in modo da poterci lavorare da subito quindi include la Working directory oltre che la cartella nascosta di controllo ".git".
  • "Bare Repository", che è destinato ad accogliere repository di repository quindi una volta creata è vuota ad ecccezione che della cartella di controllo ".git".

Vedi qui stackoverflow

Non-bare Repository

E' la situazione più frequente (e di questa guida) in cui si include oltre alla cartella nascosta di controllo, .git anche la working directory ovvero i files a cartelle che si vogliono conseervare e gestire. Se il progetto da controllare si chiama "ProgettoTest01", il comando da lanciare mediante "Git CMD" è:

git init ProgettoTest01.git
Git repositoty 01.png

A questo punto si potranno creare\copiare nella cartella "ProgettoTest01.git" appena creata tutti i files necessari quindi procedere con le operazioni operative per il controllo del codice sorgente o di quant'altro si vuole versionare.

Bare repository

Crea uno spazio "vuoto" ovvero predisposto a contenere progetti quindi senza la "Working directory", si noterà solo la cartella nascosta di gestione .git. Si possono vedere solo gli oggetti come li gestisce Git, sono compressi e serializzati in SHA1. Non si può vedere come un progetto è strutturato. (Come usre un bare repository stackoverflow).
Se lo spazio da controllare con Git lo si vuol chiamare "ProgettiTest", il comando da lanciare mediante "Git CMD" è:

git init --bare ProgettiTest.git
Git bare repository 03.png

Ovviamente il passo successivo è "riempirla" con i progetti da custodire e gestire, questo ottiene con appositi comandi Git, supponiamo da qui in poi che abbiamo già compiuto questi passi.
Nota, per convenzione il nome del progetto, quindi della cartella, deve finire per .git

ATTENZIONE la cartella "ProgettiTest.git" non è detto che abbia come cartella padre la "D:\Git_Repository" perchè dipende dalla scelta che si farà al punto 6, in questo esempio, la cartella padre sarà "Git_IIS" perchè su IIS usiamo una WebApplication e non un WebSite (percorso completo: D:\Git_Repository\Git_IIS\ProgettiTest.git).

6. Creazione Website su IIS

IIS fungerà da intermediario attraverso il quale le richieste operative (Clone, Push, Commit) dai client remoti giungeranno al motore di Git presente sul Server.
Ciascun client sarà rappresentato da una utenza di Sistema Operativo del server che si associerà alla cartella creata al punto 2.
IIS riceverà le richieste perché in ascolto su una porta, la 80 per l'HTTP o la 443 in caso si usi il protocollo HTTPS. Le richieste saranno indirizzate ad una applicazione di Git, git-http-backend.exe questo avverrà grazie ad una configurazione del'"Handler Mapping" associato al sito che creeremo su IIS.

L'intermediazione di IIS la si può ottenere in due modi: creando un nuovo "WebSite" o aggiungendo una nuova "Applicazione Web" a quella di default (LinkInterno). La seconda strada è la più complicata ma è quella che seguiremo in questa guida.
Seguire i passi come nel seguente screenshot:

Git IIS 04.png

Prendere nota del nome dell'Application Pool associato alla WebApplication, che se non viene cambiato si chiama "Git_IIS", questa configurazione necessita della seguente modifiche da eseguire andando direttamente sul file di configurazione del Web Server. Aprire con un editor di testo il file:
C:\Windows\System32\inetsrv\Config\applicationHost.config
Cercare la sezione il cui TAG è <applicationPools>> e l'elemnto con ID uguale all'Application Pool dell'applicazione creata, "Git_IIS" e modificarlo (fare prima una copia per backup):

...etc
<applicationPools>
        <add name="DefaultAppPool" />
...etc
        <add name="Default Web Site" enable32BitAppOnWin64="false" />
        <add name="Git_IIS" managedRuntimeVersion="">
            <environmentVariables>
                <add name="GIT_PROJECT_ROOT" value="D:\Git_Repository" />
                <add name="GIT_HTTP_EXPORT_ALL" value="1" />
            </environmentVariables>
        </add>
</applicationPools>
...etc

Lo scopo è rendere evidenti due variabili destinate all'ambiente Git ovvero GIT_PROJECT_ROOT e GIT_HTTP_EXPORT_ALL.
Quindi la configurazione dell'Application Pool risulterà così:

Git IIS 05 ApplicationPool.png

7. Server Role

E' necessario che IIS abbia le funzionalità di Basic Authentication (per l'autenticazione degli utenti con credenziali già impostate alla creazopme) e CGI per l'interazione con Git usando il protocollo HTTP.
Queste due funzionalità si installano\verificano sul server usando "server Manager" se il sistema Operativo è di tipo Server o se è un Windows Professional si andrà al pannello di controllo.
Su un sistema operativo di tipo Server:

Git ServerManager BA CGI.png

Su un sistema operativo Windows Professional:
Pannello di controllo

Git cfg Windows 01.png

e

Git cfg Windows 02.png

8. Configurazione IIS, nuovo Script Map

In IIS Manager aggiungere un nuovo "Script Map", serve a collegare i comandi che giungeranno via HTTP all'applicazione (git-http-backend.exe) di Git che provvederà ad interpretarli ed eseguirli.
Fare doppio click su "Handler Mappings":

Git IIS 06 Handler Script Manager.png

Si configura come segue, impostando l' "Executable" al seguente eseguibile:
C:\Program Files\Git\mingw64\libexec\git-core\git-http-backend.exe
questo avrà la funzione di collegare le richieste HTTTP a Git.

Git IIS 07 Handler Script Manager.png

9. Configurazione IIS, impostazione Basic Authentication

Gli utenti creati al punto 3. si autenticheranno usando la "Basic Authentication" cioè quando faranno ogni operazione verso il server Git dovranno inserire, in realtà, solo la password come illustarto in seguito.
Selezionata l'applicazione Web "Git_IIS" fare doppio click sull'icona "Authentication":

Git IIS 09 Authentication.png

Quindi disabilitare l'autenticazione anonima ed abilitare quella basic:

Git IIS 10 Authentication.png

10. Accesso lato Client, test

A questo punto sarà possibile accedere da remoto a tutti i repository conservati sul server.
In base all'esempio in questa guida lanciare Git CMD col seguente comando:

git clone http://GitUser1@git.myserver.com/Git_IIS/ProgettoTest01.git

All'apertura del popup di richiesta password dell'utente GitUser1 digitare quella prevista sul Windows server.

Git Clone from remote 00.png

La clonazione creerà una cartella nascosta .git quindi si avrà:

Git Clone from remote 02.png

Nota.
La password verrà chiesta solo una volta perché verrà memorizzata sul Server.

Git Clone from remote 01.png

11. Configurazione canale HTTPS

ToDo...

Operazioni tipiche

Git schema flusso main 01.png
Guide Git:

Guida interna: Git operazioni tipiche

Fonti

"how setup a Windows git remote serve"

Mappa e Link


C# | Source Control


IIS | Visual Studio | Visual Studio code | MS SQL | Dizionario


Parole chiave:

Author