ラベル git の投稿を表示しています。 すべての投稿を表示
ラベル git の投稿を表示しています。 すべての投稿を表示

2012年6月7日木曜日

EclipseのEgitでThe Current branch is not configured for pull

GitをEclipseから操作するためにEgitプラグラインを導入しています。

ローカルリポジトリの操作は問題なく動作するんですが
リモートの操作(共有リポジトリ)でちょっと苦戦しています。

基本的に開発する流れとしては
  1. ローカルリポジトリを作成
  2. 適当な具合に開発
  3. ローカルリポジトリにコミット
  4. 共有リポジトリにプッシュ
  5. 共有リポジトリからプル
となると思いますが、どうしても5のプルがうまくいかず下のようなエラーが発生してしまいました。
the current branch is not configured for pull novalue for key branch.master.merge found in configuration

branch.master.mergeが見つからない。的なエラー。
いろいろ調べてみたんですがEgitからの操作ではなくターミナルから操作を行い対処してます。
上の1〜3の操作は変わりませんが、4のプッシュする前にgit remote add とgit configを操作してます。
$ git remote add origin ssh://git@server/test.git
$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

これをターミナルで実行してプッシュ、プルすると成功しました。
(ターミナルだけでテストしてるときはこんなことしなくても動作したんだけどな。。。)

Egitを使う以上、しょうがないこと??
このあたり詳しい方いたら教えてください。

ちなみに共有リポジトリからcloneしてきた場合は、上のような操作は一切することなく動作しました。
(git config -lでconfigの中身を確認してみるとremoteもbranchも追加されていることがわかると思います)




2012年6月4日月曜日

post-updateでちょっとハマったこと

post-updateを使ってssh経由で共有リポジトリにpushしたとき、自動的にローカルリポジトリを更新したい場合などあると思います。

例)
Server A
    └ repo-sv.git (共有リポジトリ)
    └ repo (ローカルリポジトリ)

Client A
    └ repo (ローカルリポジトリ)


  1. Client A が repo (ローカルリポジトリ) で変更・コミット
  2. Client A が Server A の共有リポジトリへpush
  3. Server A の repo (ローカルリポジトリ) を自動的に更新


これを実現するために hooks/post-update を使用します。

ハマったんで流れを書いておきます。

まず Clien A でローカルリポジトリを作成・コミットします
$ mkdir repo
$ cd repo
$ git init
$ touch test.txt
$ git add .
$ git commit -m 'first'

次に Server A に共有リポジトリを作成します。
$ mkdir repo-sv.git
$ cd repo-sv.git
$ git init --bare --shared

次に Client A に戻り、共有リポジトリへpushします。
$ git remote add origin ssh://@/repo-sv.git
$ git push origin master

これでpushは完了です。
ただこれだと普通に共有リポジトリにpushしただけです。
自動的にローカルリポジトリを更新するため、hooks/post-updateを修正します。
$ cd hooks
$ cp post-update.sample post-update
$ vi post-update

// 中身はこんなかんじ
#!/bin/sh

cd /repo && git --git-dir=.git pull

// そのまま共有リポジトリからcloneしてローカルリポジトリを作成
$ cd /
$ git clone /repo-sv.git repo

// ファイルがあるか確認する
$ ls repo
test.txt

これで Server A にもローカルリポジトリができたことがわかると思います。
hooks/post-updateの処理も追加していますので Client A に戻って再度コミット・プッシュしてみましょう。
$ touch add.txt
$ git add .
$ git commit -m 'added'
$ git push origin master

Server A でローカルリポジトリ内を確認してみると先ほど追加した add.txt が作成されていると思います。
$ ls /repo
test.txt add.txt

これでOK。

自分がハマったのは Server A でローカルリポジトリを作成するとき、clone先をsshで指定していました。
一見問題ないように思えるんですが(実際にcloneもpushもpullもうまくいくと思います) Client A が push したとき、permissionのエラーがでてしまいました。

けっこうハマったけどとりあえず動いたんでまぁいいか。




2012年6月2日土曜日

WindowsにGitをインストール 其ノ二

次にGitとOpenSSHを使う設定関係をメモしときます。

インストールはこちら
http://teru2-bo2.blogspot.jp/2012/06/windowsgit.html

cygwinのインストールが完了したらCygwin Terminalを起動してGitが正しくインストールされているかを確認します。
$ git --version
git version 1.7.9

これでインストール完了しているのとバージョンの情報を確認することができます。
あとは任意のフォルダにリポジトリを作っていろいろな操作を試してみてください。

次にOpenSSHです。
ところでGitをするのになんでSSHサーバをたてる必要がある?というかんじですが。。。
共有リポジトリにアクセスするのに一番一般的な方法っぽかったから。。。
このあたりは人それぞれ考えがあると思いますので、一応マニュアルのリンクだけ貼っときます。
4.1 Gitサーバ プロトコル

OpenSSHの設定はちょっと私も専門外なんで参考にしたサイトのリンクを貼っときます。
けっこう詳細に書かれているのでわかりやすくすんなり設定することができました。
CygwinのOpenSSHを使って自宅のWindowsにアクセスする


かなり適当ですがこれでGitとOpenSSHの設定は完了です。
以下は私が試した例を書いておきます。これができればどちらも設定が完了しているとおもいます。
// ローカルリポジトリを作成・コミットまで
$ cd ~/
$ mkdir repo
$ cd repo
$ git init
$ touch test.txt
$ git add test.txt
$ git commit -m 'first commit'

// 共有リポジトリを作成
$ cd ~/
$ mkdir repo-sv.git
$ cd repo-sv.git
$ git init --bare --shared

// 共有リポジトリにpush
$ cd ~/
$ cd repo
$ git remote add origin ssh://127.0.0.1/home//repo-sv.git
$ git push origin master

プログラム組むのがメインなんでこのあたりどう説明していいかわかりませんが
基本的な動作はこれでできるようになると思います。





WindowsにGitをインストール 其の壱

windowsでGitをインストールする場合は、msysgitcygwinの二種類があります。
はじめはmsysgitで環境を作ろうと思ってたんですがなかなかうまくいかずcygwinでインストールしました。

一応、msysgitでもローカルリポジトリを作って操作したりLinuxで構築したGit環境(共有リポジトリ)へのpush・pullはできたんですが、Windowsで作った共有リポジトリにpushができませんでした。
msysgitというよりSSHサーバをFreeSSHdでたてたんですがその設定がうまくできませんでした。

なんか悔しいんでそのうちmsysgit+FreeSSHdもも一回試してみたいと思ってます。

とりあえず今回はcygwinを使ってGitとOpenSSHの環境を構築しました。

簡単ですがやったことをメモ程度に書いておきます。


1.cygwinのサイトから「setup.ext」をダウンロードします。

2.Cygwin Setupでは「次へ」をクリック

3.Choose Instation Typeは「Install from Internet」を選択して「次へ」をクリック

4.Choose Instation Directoryは「Root Directory」はそのまま、Install Forは「All User」を選択して「次へ」をクリック

5.Select Local Package Directoryは「C:\cygwin-dll」(何でも構いませんが)のように設定して「次へ」をクリック

6.Select Connection Typeは「Direct Connection」でも構いませんが「Use Internet Expoler Proxy Settings」を選択して「次へ」をクリック

7.Choose Download Siteは適当に任意のものを選択して「次へ」をクリック

8.インストールするパッケージを選択して「次へ」をクリック
今回私の場合はGitの環境を構築したかったので以下のパッケージを選択しました。
・Devel -> git
・Devel -> git-completion
・Devel -> git-gui
・Devel -> git-svn
・Devel -> subversion-perl
・Editors -> vim
・Net  -> openssh

9.しばらく待つとインストールが完了してデスクトップに「Cygwin Terminal」とかいうショートカットができると思います。



これでインストールは完了です。
長くなりそうなんで設定関係は別に載せます。
http://teru2-bo2.blogspot.jp/2012/06/windowsgit_02.html

2012年5月22日火曜日

Gitをちょっとだけ触ってみた

ちょっと流行ってるみたいなんで触ってみました。
幸い?MacにはGitが最初から入っていたんでインストールを不要!
簡単に触ってみる分にはいいかもしれません。

まずターミナルを起動して
$ git --version
git version 1.7.7.5 (Apple Git-26)

これが表示されればGitは既にインストールされています。

個人的に使う分でいけばローカルにリポジトリを作ってそこで管理してやるといいので以下みたいなかんじ。
$ mkdir repo.git
$ cd repo.git
$ git init
Initialized empty Git repository in repo.git/.git/

これで空のリポジトリが作成されます。
ここに適当にファイルを作成してコミットします。
$ touch test.txt
$ git add test.txt
$ git commit -m 'first commit'
$ git log
commit : xxxx
Anchor : xxxx
Date : 

    first commit

こんなかんじ動けばOKだと思います。

ただこれだと自分のローカルだけでしかバージョン管理できないので複数での開発とかになるとちょっと面倒です。

そこでこれを共有リポジトリとして登録し、管理するようにします。
今回は以下のようなディレクトリ構成

staff A (~/)
    └ git (←ここが共有リポジトリ)
        └ repo-sv.git
    └ workspace
        └ repo.git
            └ test.txt

staff B (~/)
    └ workspace
        └ repo.git
            └ test.txt

サーバとなる端末で共有リポジトリを作成します。
(今回はローカルPC内に共有リポジトリを作成します)
// staff A
$ mkdir repo-sv.git
$ cd repo-sv.git
$ git init --bare --shared=true
Initialized empty shared Git repository in repo-sv.git

これで先ほどと同様空のリポジトリが作成されます。
次にこの共有リポジトリにバージョン管理するもの登録します。
// staff A
$ cd workspace
$ git push ~/git/repo-sv.git master

そして別のPCから共有リポジトリをcloneしてきます。
// staff B
$ cd workspace
$ git clone <User Name>@<Host Name>:git/repo-sv.git repo.git

あとは修正してコミットしてを試して見てください。
// staff B
$ cd repo.git
$ vi test.txt
test
$ git add test.txt
$ git commit -m 'staff B modified'
// 変更を共有リポジトリにPush
$ git push <User Name>@<Host Name>:git/repo-sv.git master


// staff A
// staff Bで変更された内容をPullします
$ cd workspace/repo.git
$ git pull ~/git/repo-sv.git
$ cat test.txt
test

いつも通りざっとしてますが、こんなかんじでちょっとだけ触ってみました。

※ git のアドレス
今回、git から cloneするところのアドレスを <User Name>@<Host Name>:git/repo-sv.gitとしてますがMacの環境のせいかこういうアドレス形態になってしまいました。
同じようにLinux環境でGitをたててやってみるとssh://<User Name>@<Host Name>/git/repo-sv.gitでつながりました。
内容というか原因はよくわかりませんがアドレスの指定のしかたになんかありそうです。