さくらレンタルサーバー」タグアーカイブ

git初心者による初心者なりのメモ

元々svn歴1年間、今のところgit歴約1週間くらいです。
gitを使用する目的は、
・個人的な、ソースコードのバージョン管理(開発に使用するPCが多いため)
・さくらレンタルサーバーにsvnを導入するのはめんどくさそう
・使っている人が多そう
程度です。

今のところ、第1の目的は果たしているので、初心者による初心者なりのメモです。
間違っている可能性も高いです。

    下記のメモの簡単な補足

  • sshのconfigに、sakuraというホストを登録しています
  • セットアップ例は、こちら
  • リモートのリポジトリは、~/git/repos.git/
  • ローカルのリポジトリは、~/local/git/
  • リモートはさくらのレンタルサーバー、ローカルはCygwin環境

まず最初にローカルに複製

ローカルリポジトリを複製しています。
複製例なので、出来立て空っぽのリポジトリです(Warningはそれが原因)。

$ cd ~/local/git/
$ git clone sakura:~/git/repos.git .
Cloning into '.'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

最初のコミット

空っぽのREADMEファイルを作成してコミットし、プッシュしておきます。

$ touch ERADME
$ git add README
$ git commit -m "最初のコミット"
[master (root-commit) ***] 最初のコミット
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode *** README

これで、ブランチを確認すると、以下のようになります。

$ git branch
* master

ローカルのブランチでの編集

gitがsvnと異なる特徴の一つが、
「コミットをローカルで行うことができる」
だと思っています。
なので、リモートのmasterリポジトリを毎回書き換えるのではなく、ローカルにlocalというブランチを作成し、区切りが良いところでmasterに合流させる、という方法を取ります。

まずは、ローカルブランチlocalの作成

$ git branch local

ブランチを確認すると以下のように増えています。

$ git branch
  local
* master

ここで、ローカルブランチに切り替えます。

$ git checkout local
Switched to branch 'local'

あとは、以下のように色々と変更を加えてコミットしていった後とします。

$ git branch
* local
  master

$ git log
commit ***
Author: user <mail>
Date:   ***

    index.phpの編集

commit ***
Author: user <mail>
Date:   ***

    index.phpの作成

commit ***
Author: user <mail>
Date:   ***

    最初のコミット

この時点でmasterリポジトリに切り替えると、以下のように変更点に差が発生しています。

$ git checkout master
Switched to branch 'master'
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

$ git show-branch
! [local] index.phpの編集
 * [master] 最初のコミット
--
+  [local] index.phpの編集
+  [local^] index.phpの作成
+* [master] 最初のコミット

そこで、masterブランチに、localブランチの変更点をマージさせます。
(マージという単語の使い方が正しくないかもしれませんが)

$ git merge local
Updating ***
Fast-forward
 index.php | 2 ++
 1 file changed, 2 insertions(+)
 create mode *** index.php

すると、両方のブランチの変更点が一緒になっていることが分かります。
ここで、リモートリポジトリにmasterリポジトリをプッシュしておきます。

$ git show-branch
! [local] index.phpの編集
 * [master] index.phpの編集
--
+* [local] index.phpの編集

$ git push origin master
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (8/8), 739 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To sakura:~/git/repos.git
 * [new branch]      master -> master

この時点でタグを追加したい場合は以下とします。
タグv0.01を作成して、タグ一覧をリモートリポジトリにプッシュしています。

$ git tag v0.01
$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To sakura:~/git/repos.git
 * [new tag]         v0.01 -> v0.01

別のローカル環境での同期

先ほどは、masterリポジトリにlocalリポジトリをマージしていました。
別のローカル環境では、最初にmasterリポジトリに変更点を反映させる必要があるため、以下のようにします。

ここでは、masterリポジトリにチェックアウトしてから、リモートから変更点を反映しています。

$ git checkout master
$ git fetch
$ git merge

そして、masterブランチからlocalブランチにマージすれば完了です。

$ git checkout local
$ git merge master

よく使っているコマンドダイジェスト

基本的に、以下のコマンドですべて事足りているのと、今後も事足りそうです。
個人的にしか使っていないので、今のところ今後も増えそうに無いです。
グループで管理する必要がある場合には、色々とセオリーの勉強が必要になりそう。

  • git checkout local で、localブランチにチェックアウト
  • git add と git rm と git mv で、各種ファイルの追加や削除、移動
  • git commit -m “コメント” でコメント付きでコミット
  • git push origin master で、masterブランチをプッシュ
  • git fetch からの git merge:リモートリポジトリから変更点を反映
  • git branch で現在のブランチの確認
  • git show-branch で、各ブランチの情報
  • git status で現在の状態確認
  • git diff で直後のコミットとの差分表示(コミット前)

さくらレンタルサーバーでの git のリモートリポジトリ作成

以下、備忘録として、さくらレンタルサーバーでの git のリモートリポジトリ作成について。
すでに、csh 環境から bash 環境に変更されていることを前提にしています。

参考サイトとほぼほぼ同じ手順ですが、さくらでの git のインストールは不必要でした。
また、ローカルの環境は cygwin 環境です。

リモート側のセットアップ

さくらでのリモートリポジトリを作成します。
--bare で作業用ディレクトリ無しで初期化しています。

$ mkdir -p $HOME/git/repos.git
$ cd $HOME/git/repos.git
$ git init --bare
Initialized empty Git repository in /home/example/git/repos.git/

クライアント側のセットアップ

クライアント側で適当にコミットしてみます。

まずは初期化。
ホームディレクトリ直下に、適当なフォルダ git を作成しています。

$ cd $HOME
$ mkdir git
$ cd git

次に、空のテキストファイルを作成して、コミット。

$ touch README
$ git add README
$ git commit -m "initial commit"

初めて使用する環境の場合、以下のようなエラーが発生するかもしれません。
指示されている通り、特定できるようにユーザー名やメールアドレスを設定すれば、問題なくコミットできるようになるはずです。

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got '***')

コミットが成功すれば、以下のようにリモートリポジトリを追加し、プッシュするだけです。

$ git remote add origin sakura:~/git/repos.git
$ git push origin master

ここでは、すでに以下の config のようにホスト名を登録しています。

Host sakura
	HostName			example.sakura.ne.jp
	User				example
	IdentityFile		~/.ssh/id_rsa.sakura.ne.jp
	ServerAliveInterval	20
	ServerAliveCountMax	3

未登録の場合には、以下のようにユーザー名やサーバー名の指定が必要になります。

$ git remote add origin example@example.sakura.ne.jp:~/git/repos.git
$ git push origin master

さくらレンタルサーバーでの文字化けの解消、bash 環境への変更

以下、備忘録として、さくらレンタルサーバーでの文字化けの解消、bash 環境への変更方法について。

SSH の設定

まずは、初期パスワードを変更します。32文字の記号を含んだランダムな文字列に。
次に、鍵ファイルを生成し、公開鍵を登録し、ローカルの config を設定。

Host sakura
	HostName			user.sakura.ne.jp
	User				user
	IdentityFile		~/.ssh/id_rsa.sakura.ne.jp
	ServerAliveInterval	20
	ServerAliveCountMax	3

さくらの csh 環境を調整

さくらは FreeBSD なので、vim の文字化けが発生しないように csh 環境を調整。
ただし、この後で bash 環境に変更をします。

# $FreeBSD: src/share/skel/dot.cshrc,v 1.14.6.1 2008/11/25 02:59:29 kensmith Exp $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
#

alias h		history 25
alias j		jobs -l
alias la	ls -a
alias lf	ls -FA
alias ll	ls -lA
alias vi	"jvim3 -K TTT -k t"

# A righteous umask
umask 22

set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin)

#setenv	EDITOR	vi
setenv  EDITOR	jvim3
setenv  LANG	ja_JP.UTF-8
setenv	PAGER	more
setenv	BLOCKSIZE	K
setenv	PKG_DBDIR	~/db/pkg

if ($?prompt) then
	# An interactive shell -- set some stuff up
	set filec
	set history = 100
	set savehist = 100
	set mail = (/var/mail/$USER)
	if ( $?tcsh ) then
		bindkey "^W" backward-delete-word
		bindkey -k up history-search-backward
		bindkey -k down history-search-forward
	endif
endif

さくらに bash 環境を構築

まずは、bash_profile ファイルの作成。

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin

export PATH

次に、.bashrc ファイルを作成。
エイリアスは、.cshrc と同様で、vim が文字化けしないように設定しています。

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

# User specific aliases and functions
alias h='history 25'
alias j='jobs -l'
alias la='ls -a'
alias lf='ls -FA'
alias ll='ls -lA'
alias vi='jvim3 -K TTT -k t'

# A righteous umask
umask 22

export EDITOR=jvim3
export LANG=ja_JP.UTF-8
export PAGER=more
export BLOCKSIZE=K
export PKG_DBDIR=~/db/pkg

最後に、csh 環境で以下のコマンドを入力することで、bash 環境に変更されます。

chsh -s /usr/local/bin/bash