GitHub ile SSH kullanarak Haberleşmek ve ilk Push işlemini Gerçekleştirmek

Git‘i kurmak için:
  1. UNIX Tabanlı OS’ler için: http://help.github.com/linux-set-up-git/
  2. Tüm OS’ler için: How to Install Git
Git‘in kurulu olduğunu varsayalım:
$ git --version
git version 1.7.0.4

GitHub‘ta(uzakta) hesap açılmış olsun.

Set up Git(Linux) de anlatılanların Set up SSH Keys kısmından sonrası:

Yerelde,

lifeinbeta@lifeinbeta:~$ cd ./.ssh
lifeinbeta@lifeinbeta:~/.ssh$ ls -a
.  ..  known_hosts
lifeinbeta@lifeinbeta:~/.ssh$ touch config
lifeinbeta@lifeinbeta:~/.ssh$ ls -A
config  known_hosts
lifeinbeta@lifeinbeta:~/.ssh$ vim config

Vim içerisinde config dosyasına şunlar yazılır:

Host tybgit
HostName github.com
IdentityFile ~/.ssh/id_rsa_tybgit
User git

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

SSH bağlantısında kullanılacak Private/Public Key çiftini oluşturmak için:

lifeinbeta@lifeinbeta:~/.ssh$ ssh-keygen -t rsa -C "xyz@xyzmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lifeinbeta/.ssh/id_rsa): id_rsa_tybgit
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_tybgit.
Your public key has been saved in id_rsa_tybgit.pub.
The key fingerprint is:
44:dc:bc:0e:24:10:26:08:2d:87:65:de:28:bf:c5:64 xyz@xyzmail.com
The key's randomart image is:
+--[ RSA 2048]----+
|o=+ +o ..o       |
|+oo=  ..o o      |
|.oo E  o.  .     |
| o +   .. .      |
|  . o   So       |
|   o      .      |
|  .              |
|                 |
|                 |
+-----------------+

Bu işlem sonucunda Public/Private Key çiftleri:

lifeinbeta@lifeinbeta:~/.ssh$ la
config  id_rsa_tybgit  id_rsa_tybgit.pub  known_hosts

sırasıyla; id_rsa_tybgit.pub ve id_rsa_tybgit text dosyalarının içindedir.

Public Key, Github‘da Account Settings’deki kısma eklenir.

Bağlantı ayarları aşağıdaki gibi test edilebilir:

lifeinbeta@lifeinbeta:~/.ssh$ cd ~
lifeinbeta@lifeinbeta:~$ ssh tybgit
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
Hi tyb! You've successfully authenticated, but GitHub does not provide shell access.
    Connection to github.com closed.

Bu işlem sonunda permission denied(publickey) vb. hatalar alınabilir ki bunu yazdığımın ertesi günü tekrar denediğimde aldım. Google’dan aratıp çeşitli yazılarda belirtilen adımlar takip edilerek sorun giderilebiliyor, ama işin içinden çıkılmaz bir hal de alabiliyor. Bu yazılardan okuduklarımdan anladığım kadarıyla, bu hatanın çözümü için:

  1. .ssh klasörü altındaki dosyaların izinlerinin 600 olması gerekir(SSH bunun aksindeki izinlerde istenen işlemi gerçekleştirmez). Bunun için $~ chmod 600 ~/.ssh/* yapılır.
  2.  ssh-add id_rsa_olusturulan_private_key ile [SONRA-YAZILACAK:???] yapılır.
  3. Ayrıca, config dosyasına
    PreferredAuthentications publickey
    Port 22
    TCPKeepAlive yes
    IdentitiesOnly yes

    ekledim. Ama, bu ayarlar zaten varsayılan ayarlarmış, belirtmeye gerek yok. 🙂

Bu işlemlerden sonra GitHub‘a ssh ile bağlanılıp repo oluşturulabilir. Yukarıdaki mesajda “GitHub does not provide shell access“(GitHub kabuk erişimi sağlamaz.) kısmında belirtildiği gibi, GitHub’da repo‘yu site üzerinde oluşturmak gerekir. Üstünü çizdiğim cümlede yanılmamın nedeni bu kısmı setting up a remote repository and doing initial push yazıyı referans alarak yazmamdı. Orada yazılanlar doğru olmasına rağmen,

ssh git@example.com

daki, HostName‘in example.com olduğuna dikkat etmedim. Yazı, kabuk erişimi sağlayan GitHub harici bir siteye(Git burada kurulmuş ve gerekli ayarları yapılmış) bağlanıp burada remote repo oluşturmak üzerineydi. Oysa, mevcut bağlantı ayarlarına göre amacım GitHub‘a bağlanıp burada Repo oluşturmaktı. Bu yüzden şu scriptin;

ssh git@example.com
mkdir my_project.git
cd my_project.git
git init --bare
git-update-server-info # If planning to serve via HTTP
exit

yaptığı işi, GitHub profilime girip oradan Create Repo seçeneğini seçerek yaptım.

NOT: Bu yazıda git komutlarını birleştiren iki tane kabuk script’i var. Bunlara benzer Git Commit Counter ve Git Logger yapılacak…

Bu repo‘ya ilk push işlemini yapalım. Bunun için:

lifeinbeta@lifeinbeta:~$ cd GIT
lifeinbeta@lifeinbeta:~/GIT$ mkdir dummy1
lifeinbeta@lifeinbeta:~/GIT$ cd dummy1
lifeinbeta@lifeinbeta:~/GIT/dummy1$ git init
Initialized empty Git repository in /home/lifeinbeta/GIT/dummy1/.git/
lifeinbeta@lifeinbeta:~/GIT/dummy1$ la
.git
lifeinbeta@lifeinbeta:~/GIT/dummy1$ touch dummy.file

lifeinbeta@lifeinbeta:~/GIT/dummy1$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	dummy.file
nothing added to commit but untracked files present (use "git add" to track)

lifeinbeta@lifeinbeta:~/GIT/dummy1$ git add dummy.file

lifeinbeta@lifeinbeta:~/GIT/dummy1$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#	new file:   dummy.file
#

lifeinbeta@lifeinbeta:~/GIT/dummy1$ git commit -m "ilk commit: dummy.file oluşturuldu,şu anda boş."
[master (root-commit) 29a685c] ilk commit: dummy.file oluşturuldu,şu anda boş.
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 dummy.file

lifeinbeta@lifeinbeta:~/GIT/dummy1$ git remote add origin git@github.com:tyb/dummy1.git
lifeinbeta@lifeinbeta:~/GIT/dummy1$ cat .git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git@github.com:tyb/dummy1.git
	fetch = +refs/heads/*:refs/remotes/origin/*
lifeinbeta@lifeinbeta:~/GIT/dummy1$ git config --global user.name "Taha Yavuz Bodur"
lifeinbeta@lifeinbeta:~/GIT/dummy1$ git config --global user.email "xyz@xyzmail.com"
lifeinbeta@lifeinbeta:~/GIT/dummy1$ cat .git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = git@github.com:tyb/dummy1.git
	fetch = +refs/heads/*:refs/remotes/origin/*
lifeinbeta@lifeinbeta:~/GIT/dummy1$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 251 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:tyb/dummy1.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

yapılır.

NOT: Yukarıdaki, görüldüğü git config --global ... ile belirtilen değerler .git/config e yazılmaz(global parametresinden de anlaşılacağı gibi). Global Git Config dosyasına girdiğim ayarlar şunlardı:

$ git config --global user.name "Taha Yavuz Bodur"
$ git config --global user.email "your_email@youremail.com"
$ git config --global github.user tyb
$ git config --global github.token GitHub_da_hesap_acarken_verilen_token

Detaylı bilgi için: Git Global Config Dosyası

GitHub‘daki remote repo‘nun son hali:

GitHub Remote Repo'ya ilk Push işleminin sonucu

GitHub Remote Repo'ya ilk Push işleminin sonucu

 Güzel bir söz:

Hours fly, flowers die, new days, new ways, pass by, love stays!

[Vakit uçar, çiçekler ölürsolar, yeni günler, yeni yollar, geçip gider, aşk yerinde kalır! ]

Advertisements

Leave a comment

Filed under git

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s