Primeira ‘Olhada’ em Clojure – Fatorial Exemplo

July 4, 2009

A alguns meses atrás eu dei uma olhada em Clojure, mas não testei nada, agora voltei a dar uma olhada mais com calma nessa linguagem, para quem não sabe do que se trata lá vai uma descricao direta do site:

Clojure is a dynamic programming language that targets the Java Virtual Machine. It is designed to be a general-purpose language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming. Clojure is a compiled language – it compiles directly to JVM bytecode, yet remains completely dynamic. Every feature supported by Clojure is supported at runtime. Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection. ”

Você pode encontrar mais informações detalhadamete visitando o site(inglês).

Instalando:

Se você estiver usando Ubuntu você pode seguir o seguinte link onde tem todas informações para a instalação ( Inglês).

Você pode entrar agora num ambiente onde você pode ir digitando seus codigo e ver o resultado, estilo IRB(RUBY), no terminal faça:

ex

Você provavelmente deve tar achando estranho o modo como foi feitas as operações matemáticas aqui, mas pessoalmente é muito elegante desse mudo, vamos dar uma olhada na sintaxe da Clojure comprando com outras linguagens.

Em Clojure a definição de uma função/método, é a seguinte:

2

Temos tres coisas a se analisar nesse pequeno exemplo:

1 – Palavra chave para definição da função é defni

2 – Os argumentos são colocados dentro de colchetes ( [ ] )

3 – A forma como é realizada a soma do caso, primeiro usamos o operador desejado e logo após colocamos os argumetos(elegante não ?).

Definição de variavéis:

(def minha-variavel 10)


Definição de uma lista:

(def minha-lista ‘(1 2 3 4 5 6) )

Definição de um vetor:

[ 1 2 3 4 ]

Definição de Maps:

Maps são zero ou mais chaves/valores definidos entre chaves.

{:a 1 :b 2 :c 3}

em Clojure virgulas são considerados espaços em branco, então pode-se usar para organizar de melhor forma os maps, assim:

{:a 1, :b 2, :c 3}

Existem outros você deve olhar diretamento no web site para estudar com mais detalhe.

Um exemplo usando algo vindo do mundo Java:

jc

Para finalizar esse pequeno post sobre clojure vamos ao exemplo que faz parte do título,

o famoso fatorial.

fact

Abaixo como o exemplo é executado:

jp


Gmail agora com “arrastar e soltar”

July 2, 2009

Post rápido, agora gmail com mais uma funcionalidade, bom ou ruim ?

Untitled


TDD + Ruby: Número de Fibonacci

June 15, 2009

Estou necessitado de escrever posts melhores, eu sei, mas enquanto isso, tava brincando aqui com TDD + Ruby, então resolvi fazer um código para gerar a sequencia de Fibonacci fazendo o uso de TDD.

Para quem ainda não sabe, o numero de fibonacci e uma sequencia de numero, que é gerada começando com 1 e em seguida somando os dois anteriores para se conhecer o próximo, na prática:

Começamos com 1, então o proximo numero será : 0 + 1 = 1, o seguinte será 1 + 1 = 2 … 2 +1 = 3 … e assim vai… essa sequencia é defenida como sendo recursiva, a formula é:

0d5cce25d67941bb4661afd52609d93c

Bom, o problema ta entendido(eu acho) rs.

Como vamos fazer o uso de TDD, vamos começar escrevendo nossos testes

Precisamos ter um método chamdo por exemplo fibo, esse método deve receber como argumento um inteiro, inicialmente se passarmos 0(zero) devemos ter como retorno 0(zero), entõa vamos criar o esqueleto do teste:


require "test/unit"

require "fibonacci.rb"

class Test < Test::Unit::TestCase
   def test_case_name

   end
end

Acima está o esquelete de um teste básico, na primeira linha fizemos a inclusão do framework de teste, no segundo require chamamos a nossa classe fibonacci(que ainda nao existe), e logo em seguida temos o primeiro método para teste, vamos mudar o nome dele e acresentar o comportamento que nossa classe fibonacci deve ter quando receber zero.


require "test/unit"
require "fibonacci.rb"
class TestFibonacci < Test::Unit::TestCase
	def test_fiboZero
		assert_equal(0, Fibonacci.seqfibo(0))
	end
end

Todo teste deve iniciar com o palavra test, logo em seguida vem nosso teste propriamente dito, é justamente o que falamos acima, se receber Zero, retorne Zero, vamos rodar nosso teste para ver o que acontece:

LoadError: no such file to load  fibonacci.rb

Ops, certamente teriamos um erro ai mesmo, pois ainda nao criamos nossa classe fibonacci, vamos cria-la,(sem nehum codigo ainda) e rodar novamente:

Ops, denov, so temos um arquivo e mais nada então recebemos o seguinte:


Started
E
Finished in 0.002 seconds.

1) Error:
test_fiboZero(TestFibonacci):
NameError: uninitialized constant TestFibonacci::Fibonacci
C:\Documents and Settings\casa\Desktop\Nova pasta\fibonacciTest:5:in `test_fiboZero’

1 tests, 0 assertions, 0 failures, 1 errors

Vamos criar essa classe, acresente o seguinte em fibonacci.rb:


class Fibonacci
    def self.seqfibo(num)
       return 0 if num == 0
    end
end

Bom, isso provavelmente irá fazer nosso teste passar, rodando recebemos o seguinte:

Started
.
Finished in 0.002 seconds.

1 tests, 1 assertions, 0 failures, 0 errors

Legal, tudo passou, nosso primeiro caso esta feito, agora, podemos pensar em outro comportamento para nossa classe. . . .bom testamos com zero agora vamos tentar passar um(1) para o método e ver o que acontece, incluindo mais método para teste (poderia ser feito no mesmo método, mas vou separar aqui), nosso código de teste agora fica assim:


require "test/unit"
require "fibonacci.rb"
class TestFibonacci < Test::Unit::TestCase
    def test_fiboZero
       assert_equal(0, Fibonacci.seqfibo(0))
    end
    def test_fiboUm
       assert_equal(1, Fibonacci.seqfibo(1))
    end
end

a lógica dos teste aqui, nao mudou nada, vamos rodar para ver:

Started
F.
Finished in 0.033 seconds.

1) Failure:
test_fiboUm(TestFibonacci) [C:\Documents and Settings\casa\Desktop\Nova pasta\fibonacciTest:8]:
<1> expected but was
<nil>.

2 tests, 2 assertions, 1 failures, 0 errors

Bom, vimos ali que o teste esperava 1 mas retornou nil, vamos implementar essa lógica na nossa classe, agora temos isso:


class Fibonacci
    def self.seqfibo(num)
       return 0 if num == 0
      return 1 if num == 1
    end
end

Exatamente igua ao anterior, agora não seria nada bom ficar acresentando todos essas asserts ai para testar cada um dos numero que esperamos obter,  para isso em nosso teste vamos criar um array de arrays contendo vários cassos de testes algo do tipo:

testes = [[0,0][1,1][2,1] . . .]

e logo interar por esse array passando esses valores para nosso teste, logo iremos ter um unico método, nossa classe teste fica +  – assim agora:


require "test/unit"
require "fibonacci.rb"
class TestFibonacci < Test::Unit::TestCase
    def test_fiboZero
       teste = [[0,0],[1,1],[2,2],[4,5],[3,2]]
       teste.each do |t|
          assert_equal(t[1], Fibonacci.seqfibo(t[0]))            
       end
    end
end

Bom, creie um array de array com alguns cassos, agora so falta implementar na classe fibonacci um funcao recursiva para fazer o calculo, então agora tempo:


class Fibonacci
     def self.seqfibo(num)
        return num unless num > 2
       seqfibo(num-1) + seqfibo(num-2)
   end

 #um metodo pra executar

   def execute
       for i in 1..10
          puts seqfibo(i)
       end 
  end
end

Agora rodamos o código de teste e recebemos:


Started
.
Finished in 0.002 seconds.

1 tests, 5 assertions, 0 failures, 0 errors

Bom, aqui acabamos nossa implementação, obviamente da para melhorar e fazer muitos outros teste, e melhorar o teste, e tudo mais, se alguem achar erros, ou quizer falar algo, porfavor deixe um comentário.


[Dica Rápida] Problema ao rodar Ruby no E-TextEditor

June 11, 2009

Se você é um usuário Windows e usa o E-textEditor e estiver tentando usar o comando ctrl+r para rodar seus codigos e está recebendo a seguinte mensagem:

ruby: no such file to load — ubygems (LoadError)
faça o seguinte para concertar esse problema:

1 – Baixe a ultima versao do RubyGems do site

2 – Descompacte-o dentro da sua pasta de usuario do Cygwin, no meu caso em:  C:\cygwin\home\edipo

3 – Abra o terminal do Cygwin e execute os seguintes comando:

$  unset RUBYOPT
$ ruby setup.rb

Pronto isso deve resolver.


O Twitter esta fazendo você postar menos?

June 8, 2009

Ouvi essa pergunta não sei em que lugar esses dias, e fiquei pensando sobre isso alguns minutos (sim minutos isso não merece mais do quem alguns poucos minutos J), e cheguei à conclusão que em alguns casos sim, ele faz com que você não crie um post, eu apenas digite umas palavras e poste um link, na “caixinha” de 140 caracteres.

Eu uso o twitter a menos de três meses, minha escolha de criar um não foi a pela quais infelizmente grandes partes das pessoas fazem que é: Ter o Maximo de seguidores possíveis criei o meu com o intuito de poder compartilhar de forma rápida e fácil algumas coisas que são de meu interesse e que interessam as pessoas que me seguem, claro às vezes posto qualquer merda do tipo “Ai que frio que ta aqui”, mas isso acontece com todo mundo, antes de eu ter um twitter eu já via muitas pessoas usando e falando bem,   mas nunca tive o interesse de criar uma conta, até que um dia criei, e fiquei impressionado com o quão ele é bom quando usado da maneira correta,  apesar do twiiter “fazer” a pergunta “O que você esta fazendo”  ele não é sobre isso,  a partir do momento em que você começa a usar o twitter de forma correta ele é fantástico.

Antes de mais nada, twitter não é microblogging, sim é Wikipédia diz isso, mas não acredite nela nesse assunto ela fala merda.  Bom, Blog e Twitter são coisas diferentes logo não podemos substituir um pelo outro, o que na verdade acontece é que as vezes, por exemplo, você ta lendo algum livro legal, ou ta estudando   alguma coisa X e pensa “Ops, isso é legal merece um post” ai você para e diz – Ah vou logo colocar um link sobre o assunto no twitter e escrever “Olhem que legal isso”, certo, isso funciona é bom sim, mas não é um coisa que se pode equiqualar com um post com algunas paginas no seu blog,  nesse exemplo isolado você esta somente passando a informação que você acabou de ler ou coisa do tipo para frente, no caso no blog é diferente, você está ali no seu espaço escrevendo a sua opinião sobre dado assunto colocando seus exemplo e tudo mais.

Isso é realmente incrível, porque eu vou fazer um post para escrever algo =< que 140 caracteres, não é dignos de um post, o que se deve fazer é realmente separar as coisas, quando você sabe que um dado assunto não irá lhe render um post decente, simplesmente não o faça, claro, isso também não quer dizer que você deve twittar qualquer merda que esteja lendo ou algo assim.

Basicamente eu penso assim, você pode transmitir o que quer com até 140 caracteres? Se sim use o twitter senão, use o seu blog, e logo depois use o twitter para transmitir o link para o post J, acredito que é assim que deve ser vista as coisas quando se trata disso, é e tenho dito Ops, será que eu poderia ter dito isso em 140 caracteres?

Coisas que possam lhe interessar:

http://www.twitter.com/

http://www.twitterbrasil.org/

http://www.twitterportugal.com/


Qual Tipo é ? INT … FLOAT

April 17, 2009

Acabei de ver isso no Twitter do Carlos Brando e não pude deixar de colocar aqui a imagem, lá vai:

libman241


Minha última aquisição(Livros).

April 16, 2009

Uma coisa que acredito que não tem como ser dinheiro jogado fora é comprar livros,  sim livros,  seja ele um romance, técnico, ou seja lá que diabos se trate o livro, sempre mas sempre você irá aprender coisas novas, algumas vezes você aprende muito outras nem tanto, mas sempre aprende algo.

Sim, na internet tem muita coisa, mas ela nunca vai substituir o livro, em livros você tem boa parte de um determinado assunto organizado de forma que você possa realizar consultar por exemplo de forma rápida e fácil e sem necessitar de uma conexção :) .

Sim temos os livros digitais em alta também que é uma grande idéia, cito como algo fantánstico o que o pessoal da pragprog.com faz que é lançar os livros em beta onde você pode comprar em pdf e quando o livro tiver pronto você recebe a versão em papel.

Mas enfim, os dois livros que comprei foram:

A Cabeça de Steve Jobs de Leander Kanhney

Startup de Jessica Livingston

Escolhi começar lento startup, pelo simples fato do livro ser organizado em entrevistas, como entrevistas me interessam muito resolvi escolher esse para começar.

Não li muito, li 4 entrevistas até agora foram elas:

  • Steve Wozniak, co-fundador da Apple;
  • Mike Lazaridis, co-fundador da RIM, fabricante do BlackBerry;
  • Sabeer Bhatia, co-fundador do Hotmail, empresa posteriormente adquirida pela Microsoft;
  • David H. Hansson, sócio da 37signals;

A que mais gostei sem dúvida alguma foi a do Wozniak, eu não conhecia tanto sobre ele, e sobre o que ele fez, mas o cara era e é realmente bom, acredito que bom não seja a palavra certa para esse cara, e creio que seja dificil achar palavras para descrever o quanto Woz é uma pessoa surpreendente, não so em termos técnicos mas também nos pessoais, as pessoas deveriam agradecer a ele as vezes :) .

As outras entrevistas também são bem legais, assim que eu acabar faço um post sobre o livro inteiro, e o mesmo quando eu acabar de ler o do Jobs.

Abaixo algumas fotos dos livros:

0415091053541

041509105406

041509105421

041509105448

0415091055531

É isso ai, t+.


Ubuntu 9.04 Beta … PRA min ja é melhor que o 8.10

March 27, 2009

Sim, pode chamar de louco mas eu já to usando o Ubuntu 9.04 a curiosidade não deixou esperar mais, e assim que foi liberado a versão beta eu ja fiz um update, minhas supresas foram muitas, 1 minha Wireless continuou funcionando, e o medidor do nível da bateria do note (Acer 5050 ) finalmente funcinou, sim funcinou olhem:

bateria

Viram? . não vou fazer um post falando detalhadamente como esta o uso do Beta aqui bem porque eu to usando ele de fato a nem 1 hora, essas foram minhas primeira impresões sobre ele, ah,também posso dizer que esta relativamente mais rápido para iniciar e para abrir as coisas, vamos ver com o tempo..

Se quizerem saber nóticias do “front” visitem meu Twitter.


Chega de RECLAMÕES GRATUITOS

March 8, 2009

Acabei de ler um post no Blog do Aurelio sobre um cara chamado Ângelo Beck, do qual não pude deixar de postar aqui no blog e aprovitar para falar tambem do James.

Ângelo Beck é aquele tipo de pessoa que faz qualquer um repeensar melhor suas atitudes(reclamar e reclamar), eu chamaria esse cara até de herói, assim como considero já o James Edward Gray II, para quem não sabe o James é famoso pelo Ruby Quiz e também seus livros TextMate: Power Editing for the Mac, Best of Ruby Quiz, mas o que esse James e Beck tem de mais, bom primeiro os dois são programadores, segundo os dois tem alguma deficiência, o Beck é cego, e James tem sérios problemas físcos, ele está em uma cadeira de rodas à vários anos.

Vocês pararam para contar quantas vezes em um dia agente reclama das coisas, dizendo “a eu não consigo fazer isso”, “a  não quero aprender, é dificl demais”, “Não tenho tempo’, “Já trabalho demais ….”, ou seja reclamamos e reclamamos, só isso, nada de agir, ir atrás das coisas, por isso estou postando isso aqui, citando os nomes acima como GRANDES EXEMPLOS DE VIDA, Beck é um programador CEGO, não irei relatar aqui tudo pois vocês podem ler Blog do Aurelio , mas vocês devem imaginar o quão dificil deve ser programar sendo cego, agente(quem programa) reclama muitas vezes falando,”eu não sei como se faz certa coisa”, “nao sei não sei nao sei…” e temos grande facilidade de simplesmente abrir o google fazer uma pesquisa e ler e ler e ler, com uma facilidade incrível, podemos pegar livros e ler facilmente, enfim vários recursos, mas não muitos só ficam reclamando, ( leiam o Blog do Aurelio para ver como são as coiasas com o Beck), como é dificil para ele se achar dentro de um código, e tudo mais.

James é outra pessoa do tipo que realmente lhe faz se sentir um verme( de fato ), ele fez e faz grandes contribuições para a comunidade Ruby em geral, escreve excelentes artigos no seu blog, foi reponsável pelo excelente Ruby Quiz, afim fez e faz centenas de coiasas sem se lamentar e chorar, simplemente por ter os  sérios problemas que tem.

Muitas pessoas, fica reclamando porque tem que estudar, trabalhar e não sei mais o que, “A eu faço faculdade X é muito dificil, é a mais dificil de todas,,,” são os verdadeiros “RECLAMÕES GRATUITOS”, não estou dizendo aqui que não devemos reclamar das cosias, o que eu acho é que não se deve fazer é ficar reclamando somente para querer se parecer SUPERIOR aos demais, isso é de um grau tão baixo que nem encontro palavara para colocar aqui.

Espero que esses dois exemplo façam com que todo dia antes de começar a reclamar de alguma coisa, você parem e lembrem desses dois caras e o que ele fazem.

Aqui deixo uma citação do Beck:

Ângelo Beck

E você leitor(a), qual era mesmo aquela sua desculpa para não programar?
:)


Começando com GIT. Parte 1

February 22, 2009

Olá pessoal, a algum tempo já postei aqui como fazer para instalar e configurar o GIT
no Ubuntu Linux, e disse que haveria mais sobre o git aqui no blog, pois bem passou maior
tempão e não postei nada sobre o GIT, pois bem, aqui estou, nesse segundo post sobre git vamos dar uma olhada
no básico do git, vamos criar um “projeto” de “mentira” para simularmos o uso básico do git.

1 – Começando…

Para começar vamos criar um diretório para armazenar nosso “projeto”, vamos chamar esse
diretório de ‘demo’, dentro dele vamos criar uma pasta libs uma log e alguns arquivos,
então vamos para o nosso bom o velho terminal.

OBS: Estou rodando no Ubuntu, caso você seja do mundo Windows recomendo seguir os
passos do ótimo post do Fábio Akita sobre como montar um ambiente de programacão
Ruby/Rails no Windows, esse inclue o GIT.

Bem dito isso … no terminal:

mkdir demo
cd demo
mkdir libs logs
touch file1.rb file2.rb file3.rb file4.rb

Bom acho que não prescisa nem explicar… criamos as pastas com mkdir e alguns arquivo com
o touch, bom nosso diretório demo esta assim:

.
|– file1.rb
|– file2.rb
|– file3.rb
|– file4.rb
|– libs
`– logs

2 directories, 4 files

2 – O arquivo .gitignore.

Esse arquivo é de grande importância nele podemos definir o que queremos que o git ignore
por exemplo, arquivos de log (nossa pasta log, por exemplo) não necessita de controle de
versão, um pasta que contém algumas imagem usada no projeto idem e assim por diante,
aqui entra seus critérios do que você não quer que o git controle.

No meu caso eu costumo ainda adicionar um linha para ele ignorar os arquivos temp(~),
que o editor(gvim, gedit…) cria.

Tendo isso em mente podemos criar nosso .gitignore.

touch .gitignore
gvim .gitignore

Acima criamos o arquivo .gitignore e abrimos ele com o gvim e digitamos o seguinte:

log/*.*
*.rb~

OBS1: Isso não é nada “mundo real” como não estou criando um projeto de verdade não irei
ter arquivo de log (.log) de verdade, então simplesmente mandei ele ignorar tudo dentro
da pasta log/, apenas para demonstração.

3 – Inicializando o GIT…

Agora vamos colocar o GIT em ação para inicializar o repositório git usamos o comando
git init… então na pasta demo ….

git init

você irá receber a seguinte mensagem:
Initialized empty Git repository in /home/edipo/Desktop/demo/.git/

Tudo OK, nosso repositório foi inicializado.

Agora se você der um ls -la(lista arquivos incluindo ocultos) irá ter algo assim:

ls -la
total 32
drwxr-xr-x  5 edipo edipo  4096 2009-02-20 00:52 .
drwxr-xr-x 11 edipo edipo  4096 2009-02-20 00:20 ..
-rw-r–r–  1 edipo edipo     0 2009-02-20 00:21 file1.rb
-rw-r–r–  1 edipo edipo     0 2009-02-20 00:21 file2.rb
-rw-r–r–  1 edipo edipo     0 2009-02-20 00:21 file3.rb
-rw-r–r–  1 edipo edipo     0 2009-02-20 00:21 file4.rb
drwxr-xr-x  7 edipo edipo  4096 2009-02-20 00:52 .git
-rw-r–r–  1 edipo edipo     0 2009-02-20 00:34 .gitignore
drwxr-xr-x  2 edipo edipo  4096 2009-02-20 00:20 libs
drwxr-xr-x  2 edipo edipo  4096 2009-02-20 00:20 logs

4 – Adicionando os arquivos ao git…

Agora que já temos nossos arquivos, incluindo o .gitignore e nosso repositório inicializado
podemos adicionar nossos arquivos ao git, para fazer isso você usa o comando git add .

o .(ponto) do comando quer dizer TODOS arquivos, mas você também pode adicionar somente um
usando por exemplo git add nome_arquivo.

Bom vamos ver em que estado estamos agora, para isso temo o camando git status que nós diz
como as coisas estão:

git status
#         On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use “git rm –cached <file>…” to unstage)
#
#       new file: .gitignore
#       new file: file1.rb
#       new file: file2.rb
#       new file: file3.rb
#       new file: file4.rb
#

e ai está temos nossos novos arquivos, agora pricisamos fazer o primeiro commit para isso
usamos o comando git commit -m -a ‘mensagem’, bom -m quer dizer que queremos colocar
uma mensagem e -a todos os arquivos, você pode também usar somente  commit -a
ai ele irá abrir seu editor de texto padrão então você adiciona sua mensagem no arquivo
que será aberto, então:

git commit -a

o vim será aberto digito ‘i’ para ir para o modo de edição e digito a mensagem “Primeiro
Commit” dou ESC e :x para sair e salvar, pronto vou receber o seguinte no terminal:

git commit -a
Created initial commit 3825061: Primeiro Commit
1 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 file1.rb
create mode 100644 file2.rb
create mode 100644 file3.rb
create mode 100644 file4.rb

Ok está ai os arquivos, agora podemos usar o comando git log para ver como estão as coisas:

git log
commit 382506110486d1d89de8debbe8ef54f0bd83d8c2
Author: edipo <edipofederle@gmail.com>
Date:   Fri Feb 20 12:46:23 2009 -0300

Primeiro Commit

Então ai está o nosso primeir o commit.

5 – Modificações…

Bom legal até agora, vamos agora modificar alguns arquivo para a ver como o git age.

vim file1.rb
i

vamos criar uma simples classe Ruby nesse arquivo, coloque o seguinte ou qualquer outra
coisa que você queira.


class File1
  def hello(name)
    puts "Hello #{name}."
  end
end

salve o arquivo, voltando ao terminal usamos o git status para ver se algo mudou..

git status
# On branch master
# Changed but not updated:
#   (use “git add <file>…” to update what will be committed)
#
#       modified:   file1.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)

Bom, ai está o nosso arquivo que fizemos a mudança, antes de dar um commit precisamos adicioná-lo então…

git add file1.rb

agora rodando o git status temos:

git status
# On branch master
# Changes to be committed:
#   (use “git reset HEAD <file>…” to unstage)
#
#       modified:   file1.rb
#

Vamos fazer mais uma mundaça agora no arquivo file2.rb, vamos colocar algo simples nele como isso:


class File2
  def sum(x,y)
    x + y
  end
end

Ok, agora que alteramos outro arquivos vamos usar o comando git status para ver como estão as coisas:

git status
# On branch master
# Changes to be committed:
#   (use “git reset HEAD <file>…” to unstage)
#
#       modified:   file1.rb
#
# Changed but not updated:
#   (use “git add <file>…” to update what will be committed)
#
#       modified:   file2.rb

Agora o git nos diz que temos dois arquivos modificados mas somente um( file1.rb) para ser ‘committed’, então
agora damos um:

git commit

ele irá abrir o seu editor com o seguinte conteudo:

# Please enter the commit message for your changes.
3 # (Comment lines starting with ‘#’ will not be included)
4 #
5 # Committer: edipo <edipofederle@gmail.com>
6 #
7 # On branch master
8 # Changes to be committed:
9 #   (use “git reset HEAD <file>…” to unstage)
10 #
11 # modified:   file1.rb
12 #
13 # Changed but not updated:
14 #   (use “git add <file>…” to update what will be committed)
15 #
16 # modified:   file2.rb

No inicio do arquivo digite a mensagem do commit, – Commit somente para file1.rb nao para file2.rb”

salve, e você irá receber a seguinte mensagem:

Created commit bc36724: Apenas Commit do file1.rb nao do file2.rb
1 files changed, 5 insertions(+), 0 deletions(-)

e dando um git status temos:

git status
# On branch master
# Changed but not updated:
#   (use “git add <file>…” to update what will be committed)
#
#       modified:   file2.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)

Então temos o file2.rb que ainda nao foi add, vamos fazer mais alguma modificação em algum arquivo.

e dadando um git status agora temos os dois arquivos que foram modificados:

git status
# On branch master
# Changed but not updated:
#   (use “git add <file>…” to update what will be committed)
#
#       modified:   file2.rb
#       modified:   file3.rb

se dermos um git commit iremos receber a mesma acima:

git commit
# On branch master
# Changed but not updated:
#   (use “git add <file>…” to update what will be committed)
#
#    modified:   file2.rb
#    modified:   file3.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)

Agora temos duas modificações vamos fazer um commit adicionando todos(dois) arquivos, para isso:

commit -a

a opcão -a é para add todos arquivos, deixamos ele assim:

1 Adicionando todas as modificacoes
2 # Please enter the commit message for your changes.
3 # (Comment lines starting with ‘#’ will not be included)
4 #
5 # Committer: edipo <edipofederle@gmail.com>
6 #
7 # On branch master
8 # Changes to be committed:
9 #   (use “git reset HEAD <file>…” to unstage)
10 #
11 # modified:   file2.rb
12 # modified:   file3.rb
13 #

recebemos o seguinte ao salvar o arquivo:

Created commit 6c010c9: Adicionando todas as modificacoes
2 files changed, 10 insertions(+), 0 deletions(-
)

Ok, ai esta, agora vamo ver como ta nosso log:

git log
commit 6c010c9a8168c5c4978125e57eab7f82b795e82b
Author: edipo <edipofederle@gmail.com>
Date:   Fri Feb 20 22:37:30 2009 -0300

Adicionando todas as modificacoes

commit bc36724bdfd5411466f27d72ce9dede1164478a3
Author: edipo <edipofederle@gmail.com>
Date:   Fri Feb 20 22:13:37 2009 -0300

Apenas Commit do file1.rb nao do file2.rb

commit 382506110486d1d89de8debbe8ef54f0bd83d8c2
Author: edipo <edipofederle@gmail.com>
Date:   Fri Feb 20 12:46:23 2009 -0300

Primeiro Commit

Bom é isso nesse post, já deu para perceber o quão legal é o git, e como ele deixa as coisas organizadas, obviamente isso nao é um projeto real, e estamos “desenvolvendo” sozinhos, mas para fins de aprendizado creio que já deu para pegar algo, no próximo post iremos dar uma olhada em branchs e merges, é isso ai pessoal, espero que venha a ajudar alguem, por favor se alguem achar algum erro nesse post faza-me saber deixando um comentário, e se você
gostou tembém deixe um comentário, até mais pessoal e usem o GIT ;)