Posts Tagged: git


19
Jun 10

gitリポジトリを立ててSSHで利用

以前daemonを起動してリポジトリ立てる方法について書いたけど、今回はgitのリポジトリを立てる(SSH経由) を参考にSSH経由でできるようにやってみた。

リポジトリを置くサーバのホスト名はexampleとする。

ユーザの追加

リポジトリを操作するためのgitユーザをexampleサーバに追加する。 Mac OS 10.6の場合、ユーザは dsclで追加 する。

このときシェルにgit-shell(MacPortsで入れたなら /opt/local/bin/git-shell にある)を設定する。こうすることでpush,pullのみを受け付けるようになる。

リポジトリの作成

example:/Users/gitディレクトリ配下にリポジトリを集約するreposディレクトリを作成し、今回はprojectというリポジトリを作成してみる(末尾に.gitを付けるのは慣習?)。

% cd /Users/git
% sudo -u git mkdir repos
% sudo -u git mkdir repos/project.git
% cd repos/project.git
% sudo -u git git init --bare

鍵を追加

gitユーザにSSHでログインするための鍵を追加する。

% cat ~/.ssh/id_rsa.pub > /Users/git/.ssh/authorized_keys

cloneしてみる

$ git clone git@example:repos/project.git
$ cd project

pushしてみる

$ git push origin push

ただこのときに次のようなエラーがでるかもしれない。

$ git push -v origin master
Pushing to git@example:repos/project.git
To git@example:repos/project.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@example:repos/project.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

原因はよくわかってないのであれだけど、とりあえず-fオプションをつけて再度実行すればちゃんとpushされている。

おまけ:Redmineでリポジトリを閲覧

プロジェクトの設定画面で「リポジトリ」タブを選択し、「バージョン管理システム」にgit、「Path to .git directory」に「/Users/git/repos/project.git」を設定すれば良い。


1
Feb 10

Gitで無視するファイルを設定する

gitの操作(addやstatus)で特定のファイルを無視するには、リポジトリのルートディレクトリに.gitignoreファイルを設定すればよい。

ただし以下の点に注意。

  • .gitignore自体をadd/commitしないと効果は現れない
  • 一度commitしたファイルはあとから無視設定をしても効果がない(一旦リポジトリから削除する必要がある)(gitignoreでハマる

以下、自分の設定内容をメモっておく。

Xcodeで作成したプロジェクト

*.DS_Store
profile
build/*
*.pbxuser
*.mode1v3

buildディレクトリ以下の更新内容は無視して構わない(と以前どこかで読んだ)。あとはnib/xib以下にできるバックアップファイルとか、Finderの設定ファイルとか。

Stack Overflowにもいろいろな例があがっている(そこからgistを作った人もいる)。

Rails

Railsアプリをgitで管理するときのやり方を参考にするとよさそう。


22
Jul 09

Mac上にgitの公開リポジトリを作る

git 1.6.3.3 on Mac OS X 10.5

以下の方法でとりあえず動く。ただし安全かどうかは保障できない。

git-coreのインストール

$ sudo port install git-core +gitweb # 一応gitwebも

リポジトリの置き場所を作る

ここでは/opt/local/var/git/repos以下にリポジトリを作ると仮定する。

$ sudo mkdir /opt/local/var/git/repos
$ cd /opt/local/var/git/repos

daemonを起動

$ sudo /opt/local/libexec/git-core/git-daemon --export-all --enable=receive-pack --base-path=/opt/local/var/git/repos

–base-pathでリポジトリの置き場所を指定する。–export-allと–enable=receive-packはまだよくわかってない。

リポジトリを作る

新規に空のリポジトリを作る場合は次を実行。

$ cd /opt/local/var/git/repos
$ sudo mkdir testrepos.git
$ cd testrepos.git
$ sudo git init --bare
$ sudo touch git-daemon-export-ok

どっかからクローンしてくる場合(例えば既存のローカルリポジトリ/path/to/cloned/reposを公開したい場合)には次を実行。こっちのがsudoをあまりしなくて済むので楽かも。

$ cd /opt/local/var/git/repos
$ sudo git clone --bare /path/to/cloned/repos ./testrepos.git
$ sudo touch git-daemon-export-ok
$ sudo touch testrepos.git/git-daemon-export-ok

どちらにせよ–bareが大事。

cloneしてみる

$ cd ~/tmp
$ git clone git://hostname/testrepos.git

ToDo

  • git-daemon-export-okってなに。
  • –export-allってなに。
  • –enable=receive-packってなに。
  • 今のとこroot権限でリポジトリが作成されてるんだけど、そこらへんどうなんだろう。
  • ネットワーク越しのローカルレポジトリから公開リポジトリを作るにはどうすればいいんだろう。
  • launchctlに登録したい。

参考資料