Dropbox + Git

Öncelikle dropbox hesabınız yoksa burdan buyrun: https://www.dropbox.com/referrals/NTY3MTcxNjk
Evet, bu sayade +kota kazanıyorum.

  • Github'da private repo.'lar paralı, gitorious'da hiç yok vs. vs. 
  • Kendimiz kolayca bir sunucu oluşturabiliriz. Apache gibi birşeye de ihtiyacımız yok. Ssh bağlantısı kurabilceğimiz bir pc yeterli. Ancak "asimetrik" dsl hattımızın upload hızını düşünürsek ev sunucusu pek mantıklı değil.
  • USB stickde yanımızda taşısak, autorun.inf'ler malware'ler elbet bir yerde karşımıza çıkacak.
Sonuçta dropbox ile .git repositorylerini "local" olarak sync tutmak mantıklı gibi.

local repomuz ve ilk commit'imiz:

cd ~/projectX
git init
touch readme
git add readme
git commit -m 'first commit'
remote repo. --bare parametresi bu repo da workspace dosyalarının tutulmasını sağlıyor. Daha sonra kaşılıklık çıkmaması için önerilen bir hareket.
cd ~/Dropbox
mkdir projectX.git
cd projectX.git
git init --bare
local repo'ya geri dönüp remote'a değişiklikleri gönderiyoruz:
cd ~/projectX
git remote add origin ~/Dropbox/projectX.git
git push origin master
Diğer bilgisayarlarda
Remote'dan projemizi çekmek için:
git clone ~/Dropbox/projectX.git

git init --bare ne işe yarar
Yukarıda  daha sonra karışıklık çıkmaması için önerilir demiştim. Bu durumda remote repo'da sadece .git klasörü tutuluyor. Çalışma dosyalarımız yer almıyor.
--bare kullanılmazsa bu dosyalarda yer alıyor.
Ortaya çıkan karışıklık şu:
push komutu remote'un local çalışma dosyalarına dokunamadığından .git klasörü güncellenirken, çalışma dosyaları eski kalıyor.
Remote repo sahibinin çalışmasına başlamadan önce "checkout" demezse problemler yaşanabilir diye bunu engellemişler. Yani --bare olmadan push kabul etmiyor.
By default, updating the current branch in a non-bare repository
is denied, because it will make the index and work tree inconsistent
with what you pushed, and will require 'git reset --hard' to match
the work tree to HEAD.
Bunu aşmanın yöntemi ise checkout edilmişin dışında bir branch push etmek, veya remote repo'da bu hatayı kapatmak.

Karmaşık geldi bana, dropbox içinde ikinci bir "local" work copy tutmayı tercih ederim.