ASP .NET MVC 3 @ ISEL Tech’11

Actualização (06-06-2011): Os slides, o código-fonte das demonstrações, e a gravação em vídeo desta apresentação já estão disponíveis.

Na próxima semana decorre o ISEL Tech’11, um evento sobre tecnologia, soft-skills, empreendedorismo e empregabilidade, que acontecerá no campus do Instituto Superior de Engenharia de Lisboa nos dias 24, 25 e 26 de Maio de 2011.

No dia 24, pelas 18:30, vou falar sobre ASP .NET MVC 3, mais precisamente sobre as novidades introduzidas nesta versão, com diversas demonstrações práticas incluindo a utilização do Razor View Engine, Granular Validation, Global Filters, Dependency Injection, entre outras novidades.

Portanto, se tem interesse em conhecer as principais funcionalidades introduzidas no ASP .NET MVC 3 ou tem alguma questão sobre o tema, adicione ao seu calendário e apareça na minha sessão! :)

Para mais informações pode visitar a página do evento no Facebook, e a agenda do evento.

Publicado em Eventos | Tags , , , | 1 Comentário

Olá mundo!, v2.0

Este é o primeiro post da versão 2.0 do meu blog, após a migração do BlogEngine.net para o WordPress, e aos poucos irei migrar todos posts antigos, ao mesmo tempo que escrevo novos posts.

Publicado em Pessoal | Tags | Publicar um comentário

Registo para o Exame BETA 71-599: PRO: Designing and Developing Windows Phone 7 Applications

Desde o dia 29 de Março é possível registar-se para o exame BETA 71-599: PRO: Designing and Developing Windows Phone 7 Applications. Ao passar neste exame, além de ter contribuído com a Microsoft para definir a versão final deste exame (que terá o nome 70-599 ao invés de 71-599), receberá créditos para a certificação Microsoft Certified Professional Developer: Windows Phone Developer (MCPD), e só precisará fazer mais dois exames para alcançar esta certificação: O exame 70-513: TS: Windows Communication Foundation Development with Microsoft .NET Framework 4 e o exame 70-516: TS: Accessing Data with Microsoft .NET Framework 4.

MCPD: Windows Phone Developer

Pode encontrar o guia de preparação para este exame está no site da Microsoft Learning:
http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-599

Este exame BETA é gratuito, como é costume em todos os exames BETA da Microsoft, e basta utilizar o código WP599 ao efectuar o registo para obter o desconto de 100%.

Promocode 71-599: WP599

O registo é feito no site da Prometric (http://www.prometric.com/microsoft), e pode fazer o exame no centro mais próximo de si.

É possível fazer o exame de 19 de Abril de 2011 até 4 de Maio de 2011, mas os lugares são limitados e esgotam-se logo nos primeiros dias, por isso é melhor registar-se o quanto antes.

Publicado em Certificações | Tags , , , , , , , , , | Publicar um comentário

Introdução ao ASP .NET MVC 3.0

Desde o lançamento da plataforma Microsoft .NET, passamos a contar com um framework de desenvolvimento de aplicações Web chamado ASP .NET, que oferece diversos componentes de base para a criação destas aplicações, como por exemplo, autenticação, autorização, controlo de sessões dos utilizadores, cookies, entre outras funcionalidades, juntamente com um modelo de programação baseado em páginas e eventos que permite desenvolver aplicações Web de uma forma muito semelhante ao desenvolvimento de aplicações Windows Forms.

Este modelo de programação chama-se ASP .NET WebForms, e era o único modelo existente no framework ASP .NET até o início de 2009, quando foi então lançado pela Microsoft a primeira versão do ASP .NET MVC, que é uma alternativa ao modelo WebForms existente, e oferece um modelo de programação muito mais simplificado e directo, e baseado num padrão (design pattern) bastante conhecido e utilizado em vários outros frameworks e plataformas, chamado Model-View-Controller (MVC).

Assim, actualmente um developer que queira desenvolver uma aplicação Web na plataforma Microsoft .NET tem à sua disposição duas alternativas ou modelos de programação que pode escolher de acordo com a sua preferência: ASP .NET WebForms e ASP .NET MVC.

A versão mais recente do ASP .NET MVC no momento em que escrevo este artigo é a 3.0 RTM, disponibilizada recentemente pela Microsoft, e que está disponível para download gratuitamente através do seguinte endereço: http://caiop.me/HVqR72

É importante destacar que o ASP .NET MVC 3.0 utiliza novos recursos que fazem parte do .NET Framework 4.0, e por isso necessita ter esta versão do .NET Framework e o Visual Studio 2010 para desenvolver aplicações (não é possível utilizar o Visual Studio 2008).

O Visual Studio 2010 não inclui o ASP .NET MVC 3.0, mas sim o ASP .NET MVC 2.0, portanto a versão 3.0 deve ser instalada manualmente.

Model-View-Controller (MVC)

O padrão Model-View-Controler ou MVC permite separar o código necessário para interagir com a interface com utilizador através de três conceitos: Model, View e Controller, onde cada um tem uma responsabilidade específica.

No ASP .NET MVC, um Controller corresponde a uma classe que pode ser responsável por receber as informações solicitadas pelo cliente (navegador), e enviar uma resposta num formato apropriado, de acordo com a solicitação que recebeu.

O recebimento das informações acontece através de métodos existentes nesta classe (Controller), chamados Action. Um Controller pode possuir uma ou mais acções (Actions) possíveis de serem executadas, e cada Action é então responsável por receber as informações enviadas através do cliente (navegador) efectuar qualquer processamento que seja necessário e então enviar a resposta apropriada.

Para enviar esta resposta, a Action do Controller interage com o modelo aplicacional (Model) geralmente composto de várias classes que implementam a lógica de negócio da aplicação, e desta forma, o Controller consegue preparar a resposta a ser enviada de volta para o cliente (navegador).

Esta resposta normalmente corresponde a uma View, cuja responsabilidade é construir a resposta ao pedido solicitado, no formato apropriado. As Views normalmente são compostas por código HTML, CSS, e JavaScript, misturado com trechos de código C# ou VB .NET utilizando uma sintaxe chamada Razor.

Este modelo de programação traz uma série de benefícios aos developers, como:

  • É possível ter diferentes representações (Views) de uma mesma informação (Model);
  • Novas interfaces com o utilizador (Views) podem ser facilmente adicionadas, removidas ou alteradas, sem grande impacto ao restante da aplicação;
  • A resposta a uma requisição pode ser facilmente alterada (pois está centralizada num Controller);
  • Promove a reutilização de código (Por exemplo: Um mesmo Model pode ser utilizada com diferentes Views);
  • E provavelmente o mais importante: Ajuda os developers a manterem o foco em um único aspecto da aplicação, de cada vez.

Funcionamento do ASP .NET MVC 3

Quando o framework inicia o processamento de uma requisição, obtém um determinado endereço (URL) que é então utilizado para determinar qual será o Controller que será responsável por responder a esta requisição, e qual será a Action deste Controller que será executada. Por exemplo:

http://portugal-a-programar.org/revista/edicoes

No exemplo acima, o framework ASP .NET MVC analisa o texto da URL que está após o endereço do site, e identifica “revista” como sendo o nome do Controller que deve ser responsável por responder a esta requisição, e “edicoes” como sendo o nome do método (Action) a ser executado neste Controller.

Para que esta requisição seja processada com sucesso, é preciso que um dos assemblies do projecto (ou em assemblies referenciados) possua uma classe com as características abaixo, caso contrário a resposta enviada será um erro do tipo “404 Not Found“:

  • Precisa ser uma classe pública (public);
  • Precisa ser uma classe concreta (deve ser possível instanciar objectos desta classe… Não pode ser uma classe abstrata (abstract), ou uma interface);
  • Precisa ser uma classe derivada da classe System.Web.MVC.Controller;
  • Precisa ser uma classe que tenha o mesmo nome identificado através da URL como sendo o nome da Controller, seguido da palavra “Controller“, e precisa ter um método com o mesmo nome identificado na URL como sendo a Action a ser executada, e que retorne um objecto do tipo System.Web.Mvc.ActionResult ou de uma classe derivada desta.

No exemplo acima, a classe responsável por processar este tipo de requisições (http://portugal-a-programar.org/revista/edicoes) deve chamar-se RevistaController, e deve possuir um método chamado Edicoes.

Caso o nome do Controller e/ou da Action não esteja presente no endereço (URL), a aplicação ASP .NET MVC assume os valores “Home” para Controller e “Index” para Action, ou seja, para uma requisição do tipo http://portugal-a-programar.org/ onde não são informados os valores para Controller e Action, espera-se que exista uma classe chamada “HomeController” que por sua vez possua um método chamado “Index“.

Esta é a convenção padrão que está definida no ficheiro Global.asax e que pode ser alterada se desejar:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

}

Criando o seu primeiro projecto ASP .NET MVC 3

Para iniciar um novo projecto ASP .NET MVC 3, a partir do Visual Studio 2010 deve aceder ao menu File, seleccionar New, e então Project, onde poderá seleccionar o tipo de projecto “ASP.NET MVC 3 Web Application“, e definir o nome do projecto e o local onde será gravado.

A seguir será apresentado um ecrã onde onde pode escolher o template que deseja utilizar para o novo projecto, o View Engine (mecanismo que será utilizado para construir as Views), e tem a opção de criar um projecto de testes unitários para acompanhar este novo projecto que está a ser criado.

Os templates que pode escolher são: “Empty“, “Internet Application“, e “Intranet Application“. A principal diferença entre os três é que tanto o “Internet Application” quanto o “Intranet Application” já incluem algumas classes, controllers e views de exemplo que podem ser utilizadas como base para o desenvolvimento da aplicação, enquanto que o “Empty” apenas uma estrutura mínimo necessária para começar.

Os View Engines que pode escolher são “ASPX” e “Razor“. O View Engine define, entre outras coisas, a linguagem que será utilizada para a construção das Views, onde o mistura-se código HTML e JavaScript com código C# (ou VB .NET). ASPX é o View Engine que foi introduzido na primeira versão do ASP .NET, juntamente com o modelo WebForms e possui uma sintaxe que utiliza tags do tipo “<% … %>” para identificar os trechos de código. Já o Razor é a grande novidade do ASP .NET MVC 3 e possui uma sintaxe simplificada e considerada mais elegante, pelo que é o View Engine padrão do ASP .NET MVC 3.

Para o exemplo explicado neste artigo, foi seleccionado o template “Empty” e o View Engine “Razor“.

Ao criar o novo projecto “ASP.NET MVC 3 Web Application” é criada uma estrutura como mostra a figura abaixo:

  • Content: Pasta onde deve colocar as imagens e estilos (CSS) utilizados no projecto;
  • Controllers: Pasta onde deve colocar todos os Controllers da aplicação;
  • Models: Pasta onde deve colocar os serviços, repositórios e outras classes que implementam a lógica da aplicação;
  • Scripts: Pasta onde deve colocar os ficheiros JavaScript utilizados no projecto;
  • Views: Pasta onde deve colocar os ficheiros responsávels por construir as Views.

Esta é uma estrutura sugerida e pode ser completamente alterada se desejar (necessita de alguns tweaks em alguns casos).

Criação da página inicial do site

Para criar a página inicial (home-page) da aplicação Web, o primeiro passo é criar o controller chamado “HomeController” (que é uma classe com este nome), que será responsável por receber/responder requisições feitas para a página principal do site.

Para isto, clique com o botão direito na pasta Controllers no Solution Explorer, seleccione “Add” e então “Controller…“. No nome do controller defina “HomeController” e seleccione “Add“.

Será criado um ficheiro com o home “HomeController.cs” (ou .vb se utiliza Visual Basic .NET) na pasta “Controllers” com o seguinte conteúdo:

using System.Web.Mvc;

namespace Portugal_a_Programar.Web.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View();
        }
    }
}

A partir deste momento, ao executar esta aplicação, qualquer requisição feita para a home-page do site (ex: http://portugal-a-programar.org/ ou http://localhost:1234/) fará com que um novo objecto da classe HomeController seja automaticamente instanciado pelo framework ASP .NET MVC, e o método Index será executado. A resposta deste método Index será então enviada de volta para o cliente (navegador) que fez a requisição.

O método Index neste exemplo possui apenas uma chamada para um outro método da própria classe chamado View, um método herdado da classe Controller. O que este método faz é solicitar ao View Engine que seja construída uma determinada View, e como não foram passados parâmetros, este método assume que a View possui o mesmo nome do método (Index, neste caso), e que está dentro de uma pasta com o mesmo nome do Controller que está a ser executado (Home, neste caso).

O próximo passo é criar esta View chamada “Index“, na estrutura de pastas do projecto. Para isso, vá ao Solution Explorer e dentro da pasta Views crie uma nova pasta chamada “Home” (botão direito na pasta “Views” => “Add” => “New Folder“), e então clique com o botão direito nesta nova pasta e seleccione “Add” e então “View…“. No nome da View defina “Index” e seleccione “Add“.

Será criado um ficheiro com o home “Index.cshtml” (ou .vbhtml se utiliza Visual Basic .NET) na pasta “Views\Home” com o seguinte conteúdo:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

Neste momento, o projecto possui uma estrutura similar a figura abaixo:

E já consegue executar a aplicação e visualizar a página inicial com a palavra “Index”. Para executar a aplicação, basta seleccionar o botão “Play” no Visual Studio, ou utilizar as teclas de atalho (F5 ou CTRL + F5).

Publicado em ASP .NET MVC | Tags , , , , , , | Publicar um comentário

Revista PROGRAMAR: Edição 27 – Fevereiro de 2011

Já está disponível a 27ª edição da Revista PROGRAMAR, uma publicação digital gratuita com diversos artigos relacionados com desenvolvimento de software, e com uma nova edição a cada dois meses.

Revista PROGRAMAR 27 Esta edição traz como destaque um artigo introdutório sobre ASP .NET MVC 3 escrito por mim (Look Ma! I’m on a magazine cover!), e outros artigos também interessantes sobre jQuery, AJAX, Desenvolvimento de aplicações para o Windows Phone 7, Programação assíncrona em .NET, entre outros.

Conteúdo desta edição

  • Tema de capa
    • Introdução ao ASP .NET MVC 3.0
  • A programar
    • LUA – Linguagem de Programação (Parte 7)
    • Flex e Byacc (Parte 3)
    • Optimização de SQL em Oracle – Índices
    • jQuery – A Framework
  • Colunas
    • Programador Excêntrico: 6 regras para utilizar AJAX
    • Visual (Not) Basic: Windows Phone 7
    • Core Dump: gcc -Wall myApp.c -linstantaneous -o success
  • Comunidades Técnicas
    • Desenvolvimento em SharePoint 2010
    • GuiaTV CoolthingsPT
    • Habilitar utilizadores externos no SharePoint online – Office365
    • O Futuro da Programação Assíncrona da Plataforma .NET
  • Análises
    • Livro: Silverlight 4.0 – Curso Completo

Download: Revista PROGRAMAR Edição 27 – Fevereiro de 2011.

Publicado em Comunidades, Publicações | Tags , , , , , , , , | Publicar um comentário

Vídeo e Slides da apresentação de Git na 17ª Reunião NetPonto Lisboa

A gravação em vídeo da apresentação que fiz sobre as controlo de versões distribuído com Git na 17ª Reunião da Comunidade NetPonto em Lisboa no passado dia 22 de Janeiro está disponível no Vimeo:

Video

Os slides da apresentação estão disponíveis no SlideShare:

Slides

Agradeço a todos que assistiram a apresentação e espero que tenham gostado!

Publicado em Apresentações, Controlo de Versões, Eventos | Tags , , , , , , , | 5 Comentários

Configurar o Git para utilizar um servidor proxy para acesso a internet

Um dos primeiros desafios que tive ao utilizar do Git num ambiente empresarial, foi conseguir aceder a repositórios remotos, que estavam alojados em servidores fora da empresa, como por exemplo, no GitHub. A rede da empresa onde eu estava a utilizar o Git só permitia o acesso a internet através de um servidor proxy que fornecia acesso a internet via Http (80) e Https (443), e todas as outras portas estavam bloqueadas.

Imaginei logo que fosse possível configurar o proxy através de algum parâmetro de configuração do Git e, após alguma leitura da documentação de ajuda (git config –help), encontrei o parâmetro global http.proxy onde podemos definir o endereço do servidor proxy que deve ser utilizado pelo Git para efectuar requisições Http. Por exemplo, para utilizar um servidor proxy “meu.servidor” que fornece acesso a internet através da porta 8080:

git config --global http.proxy meu.servidor:8080

E ainda, se fosse preciso definir o user/password de autenticação para o proxy (não era o meu caso):

git config --global http.proxy utilizador:password@meu.servidor:8080

Apenas esse parâmetro de configuração já seria suficiente para conseguir aceder repositórios remotos via Http através do servidor proxy, no entanto o GitHub utiliza o protocolo Https para efectuar pull e push e, por padrão, numa comunicação Https o Git efectua a validação do certificado digital e, no caso do GitHub, essa validação nem sempre funciona e o certificado às vezes fica num estado inválido, por alguma razão, o que fazia com que as minhas tentativas de acesso aos repositórios falhassem de vez em quando.

Com mais alguma leitura da documentação do Git, encontrei o parâmetro global http.sslverify que serve justamente para habilitar (true) ou desabilitar (false) a validação do certificado digital, e era o que me estava a faltar:

git config --global http.sslverify false

E assim, com a configuração destes dois parâmetros, passei a conseguir aceder repositórios remotos alojados no GitHub e em outros serviços de alojamento, através do servidor proxy da empresa.

Por serem parâmetros globais, todos os projectos Git passam a utilizar estas definições de proxy para aceder os projectos via Http. Para voltar ao normal, ou seja, remover estes parâmetros configuração e deixar de utilizar o servidor proxy, basta executar novamente o git config, sem informar o valor dos parâmetros e com a opção –unset. Por exemplo:

git config --global --unset http.proxy
git config --global --unset http.sslverify

Nota: Pode ser necessário alterar a Url que aponta para o repositório remoto (ex: origin) para utilizar o protocolo Http/Https, caso esteja a utilizar outro protocolo:

git remote set-url origin https://empresa.com/Projectos/MeuProjecto.git
Publicado em Controlo de Versões | Tags , , , , , | Publicar um comentário

Associar repositório Git local a um repositório remoto

Quando iniciamos um novo projecto de desenvolvimento de software e queremos utilizar o Git para controlar as versões, tipicamente escolhemos uma destas opções:

  1. Criamos um repositório remoto onde o código será partilhado com o restante da equipa (no servidor da empresa, no GitHub, no BitBucket, etc…) e então fazemos um clone desse repositório para a nossa máquina de desenvolvimento, para então começar a efectuar commits neste repositório local e (eventualmente) fazer push para o repositorio remoto.
  2. Criamos um repositório local na nossa máquina de desenvolvimento onde podemos (se desejarmos) começar a efectuar commits desde já e depois (quando quisermos) podemos associar o nosso repositório local a um repositório remoto, para então podermos receber e enviar alterações de/para o repositório remoto.

No primeiro caso a associação é feita de forma automática, pois no momento em que criamos um clone de um repositório Git, é criado também um “remote” neste repositório local (clone) chamado “origin” que contém o endereço de origem (Url) do repositório que foi clonado. Este nome “origin” pode ser renomeado, se desejarmos.

No segundo caso, a associação tem de ser feita manualmente através do comando git remote add. Por exemplo, se eu desejar associar o meu repositório Git local a um repositório no GitHub que eu acabei de criar, faria algo mais ou menos assim:

git remote add origin https://CaioProiete@github.com/CaioProiete/MeuProjecto.git

A partir de agora, é possível efectuar push para o repositório remoto normalmente:

git push -u origin master

E poderia repetir o processo para associar diferentes remotes ao meu repositório local, por exemplo, para manter uma cópia do repositório em diferentes sítios (GitHub, BitBucket, Servidor da empresa, etc…), e neste caso não iria chamar nenhum dos remotes de “origin”, mas iria utilizar um nome que descrevesse o sítio associado. Por exemplo:

git remote add github https://CaioProiete@github.com/CaioProiete/MeuProjecto.git
git remote add bitbucket https://CaioProiete@bitbucket.org/CaioProiete/MeuProjecto.git
git remote add empresa https://CaioProiete@empresa.com/CaioProiete/MeuProjecto.git

E dessa forma, em minha opinião, torna-se mais simples efectuar push para os repositórios remotos que quisermos, quando quisermos, diminuindo as chances de cometermos um erro e efectuarmos push para o repositório remoto errado. Se quiser enviar apenas para o BitBucket, por exemplo:

git push -u bitbucket master

E apenas o repositório remoto “bitbucket” recebe as alterações, deixando os outros (“github” e “empresa” neste exemplo) intactos.

Publicado em Controlo de Versões | Tags , , , , , | 1 Comentário

Alterar Url de um repositório remoto no Git

Ao efectuarmos um clone de um repositório Git, automaticamente é criado um “remote” no repositório local chamado “origin” que contém o endereço de origem (Url) do repositório que foi clonado e que podemos utilizar para, por exemplo, receber alterações do repositório (pull) e enviar as nossas alterações (push).

A Url definida no “origin” é exactamente a mesma Url que foi utilizada inicialmente para criar o clone, incluindo o protocolo utilizado. Por exemplo:

git clone git://github.com/CaioProiete/MeuProjecto.git

Nesse caso, a URL armazenada no “origin” do repositório local será “git://github.com/CaioProiete/MeuProjecto.git”, como podemos ver através do comando “git remote show origin“:

$ git remote show origin
* remote origin
  Fetch URL: git://github.com/CaioProiete/MeuProjecto.git
  Push  URL: git://github.com/CaioProiete/MeuProjecto.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Se, por acaso, o repositório mudar de nome ou de sítio, será necessário actualizar o endereço que está no “origin” do repositório local para o novo endereço:

git remote set-url origin git://github.com/CaioProiete/MeuProjectoComOutroNome.git

Ainda, se estiver a aceder a internet através de um servidor proxy, é possível que apenas o protocolo Http/Https esteja acessível, e nesse caso precisará alterar a URL para apontar para o mesmo endereço, mas utilizando um outro protocolo:

git remote set-url origin https://CaioProiete@github.com/CaioProiete/MeuProjecto.git

Nota: Se ao tentar alterar a URL de um repositório remoto receber o erro fatal: No such remote ‘nome-do-repositorio’, significa o remote não existe e portanto precisa ser criado. Para criar o remote basta utilizar o comando git remote add como mostro em outro post “Associar repositório Git local a um repositório remoto“.

Publicado em Controlo de Versões | Tags , , , , | 1 Comentário

Configurar o Git para utilizar o Notepad++ como editor de texto

O Notepad++ é o meu editor de texto favorito e utilizo-o praticamente todos os dias para editar ficheiros em diferentes formatos (CSS, HTML, XML, CSV, PHP, TXT, entre outros), efectuar comparações entre ficheiros, alterar encodings e terminações de linha em ficheiros (Windows/Unix), além de utilizar outras inúmeras funcionalidades que este excelente editor gratuito e open-source oferece.

Por padrão, o Git utiliza o editor de textos Vim, uma versão melhorada do editor Vi muito utilizado em ambientes Unix para desenvolvimento de software, e que exige que o utilizador conheça as suas diferentes combinações de teclas para aceder cada uma das suas funcionalidades, o que pode tornar a utilização do Git mais complicada para quem não está acostumado com este editor, como é o meu caso.

A boa notícia é que o Git permite configurar qual deve ser o editor de texto executado quando precisarmos inserir comentários durante commits, rebases, etc…, ao invés do Vim, e para isto basta definir o caminho do ficheiro executável do editor de texto no parâmetro global core.editor através do comando git config, como mostra o exemplo abaixo:

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession -noPlugin"

No caso específico do Notepad++, além de informar o caminho do executável estou a informar três parâmetros para garantir que uma nova instância do Notepad++ é aberta cada vez que o Git executar o editor de texto (-multiInst), para que não abra os ficheiros utilizados anteriormente (-nosession) e para que não carregue nenhum plugin (-noPlugin).

Uma outra alternativa para configurar o editor de texto utilizado pelo Git (que em realidade é o que está a ser feito pelo comando acima), é alterar manualmente o ficheiro ~/.gitconfig (costuma estar em C:\Users\NomeUtilizador) e incluir a propriedade core.editor com o caminho do executável do editor, como mostra o exemplo abaixo:

[core]
	editor = 'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -nosession -noPlugin
Publicado em Controlo de Versões | Tags , , , , | Publicar um comentário