Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

Git 備忘録

f:id:fa11enprince:20170818063154j:plain

Gitでcommitを分割したいとき

次のコマンドでコミット番号を見る

$ git log --oneline --graph  

リベースする

$ git rebase -i 59b146c  

※上記コミット番号はあくまで例

エディットするコミットを選ぶ

下記のようなコミットメッセージが表示されるので、pickをedit(e)に変更

pick 310154e 部分的な修正1とその他ほげほげ

e 310154e 部分的な修正1とその他ほげほげ

ひとつ前のコミットでリセットする(※ここがポイント)

$ git reset HEAD^

※mixedモードでリセットするのでcommitとaddがひとつ前のコミットに戻る

git add前の状態になるので、必要な単位でgit addcommitを繰り返す

全部終わったらcontinueする

$ git rebase --continue

毎回ssh-addが消える問題(Windows MSYS環境)

現象

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
$ ssh-add -l
Could not open a connection to your authentication agent.

※そもそもGitHubの公開鍵設定をしていない場合は
http://ryoichi0102.hatenablog.com/entry/2017/02/03/232920
とかを参照して下さい

とりあえずその場しのぎの処置

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
$ ssh-add -l

id_rsaのところはお使いの公開鍵に変えてください

面倒なんで.bashrcに書く方法

この辺とかあるが…うーんなんだか… 毎回手でたたくでいいかなって感じもする http://d.hatena.ne.jp/himadatanode/20160823/p14

GitHubにリポジトリを新規作成する手順

f:id:fa11enprince:20170310151259j:plain よく忘れるので個人的メモ

何か既に手元にプロジェクトがあるとする。
例としてrails 4.2.2のrails tutorialのプロジェクトを作るとする。

GitHubでプロジェクト作成

f:id:fa11enprince:20170723052549p:plain

そうすると実は次に手順が書いてある

…or create a new repository on the command line

echo "# sample_app_4_2_2" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [url].git
git push -u origin master

大体こんな感じでやればOKです。README.mdの追加がいらないのと、
プロジェクト配下のファイル全部をaddしてないですね…。

ちなみにここで間違った場合、git remote set-url origin [ユーザ名]@[url].gitでoriginを変更できます。

自分のPC上でgitの設定&pushをする

上に書いたのと同様です
プロジェクトに移動してから下記を実行します

git init
git add .
git commit -m "first commit"
git remote add origin [url].git
git push -u origin master

sshでもだいたい一緒です。privateリポジトリの場合ちょっと違ったかも…あんまり覚えてない。

一応確認

pushできているか見る。OK。でも自分の画像が即座に反映されてないのか…デフォルトのになってる。 f:id:fa11enprince:20170723060727p:plain

単なる備忘録でした。

WindowsでLinuxライクな環境を作る ConEmu+MSYS2

f:id:fa11enprince:20170709232638j:plain もともとCygwin大好き派だったのですが、 パッケージマネージャーとかがアレなんでここ数年はめっきり使わず。 有志でコマンドラインでパッケージマネージャーが作られていたものの アップデートするたびに壊れていたような印象があります。

WindowsでVagrantのためにrsyncを使いたいため ConEmuとMSYS2の組み合わせでシェル環境を作りました。 その記録です。

ConEmuのインストール

公式サイトから落としてインストールするだけ

MSYS2のインストール

公式サイトから落としてインストールするだけ

ConEmuの設定

デフォルトのシェルをMSYS2にする
MSYS2をインストールしてから
ConEmuのSettings > Startup > Tasks
Add Default Tasks
で{{Bash::Mysy2-64}}
が追加されるのでStartupでそれを選ぶ
特に変更しなくていい。

なぜか私の環境ではWindowsのPATHが追加されなかったのですが、
謎…。この設定はEnvironmentで変更することができるはずなのだが。
…と思ったら C:\msys64\msys2_shell.cmd の10行目あたりをコメントアウト解除すればいいらしいとどこかに書いてあった。 が、remを消しても効果なく…。
ユーザ環境変数にMSYS2_PATH_TYPEを作ってinheritを指定したらPATHが通った。

MSYS2に必要なものを入れる

MSYS2を入れたばかりだとgccすら入ってませんので MSYS2のほうでpacmanを実行する(ConEmuだとエラーになる)

パッケージマネージャー関連の更新

$ pacman -Sy pacman
$ pacman -Syu
...長時間待つ

下記を入れるとさらに2時間くらいかかります。

開発ツールとその他よく使うツールのインストール

$ pacman -S base-devel
$ pacman -S msys2-devel
$ pacman -S mingw-w64-i686-toolchain
$ pacman -S mingw-w64-x86_64-toolchain
$ pacman -S openssh
$ pacman -S vim
$ pacman -S git
$ pacman -S tmux
$ pacman -S msys/rsync

vim関連の設定ファイルを書き換える

ここまで正しくできれば${HOME}に.bash_profileと.bashrcがあるかと思います。 ※MSYS2とConEmuをデフォルトの状態で組み合わせると
${HOME}はCygwinなどと同様に/home/[Username]となります(実際のパスはC:\msys64\home)。
ただし、ログイン直後はWindowsのUserのHomeの/c/Users/[Username](%USERPROFILE%)となっています。
ちょっとこれはやな感じですね…。設定で変えられますが…。 vimのalias等を設定します .bashrcの末尾に

alias vi='vim'
alias grep='grep --color'
alias ll='ls -laF --color=auto'
alias ls='ls -F --color=auto'

とか追加します。

さらに.vimrcを設定しましょう。ここはお好みで… 最低限でよければ下記を参照して下しさい fa11enprince.hatenablog.com

参考リンク

Windows-アプリケーション/MinGW-MSYS/MSYS2インストール - yanor.net/wiki
MSYS2 で PATH が引き継がれない

Virtual BoxのNAT接続がうまくいかないので四苦八苦して解消

f:id:fa11enprince:20160409135557j:plain そもそもの発端はVagrantを使っていて、vagrant upしたときに
sshの設定でダメになりハマっていたところからでした。
こんなやつです。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'vista-ie7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vista-ie7_default_1454528248664_66668
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.
 
If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.
 
If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.
 
If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.

よく見るエラーで、うーんわからんということで、
手動でVirtual Boxの環境を作るところからやってみました。
そしたらGuest OSからネットにつながらないじゃないですか。

なんでかNAT接続でVirtual Boxの上に構築したGuest OS(CentOS, Ubuntu)から
NAT接続で外につなげませんでした。
2週間くらい悩んでました。
前からネットワーク周りの設定をほかのソフトウェアがいじっていたせいか
不安定になっていました。
いろいろ調べましたが、Virtual BoxのつくるGuestとHostをつなぐネットワーク
10.0.2.2(Guest OSからみたときのHostのIPアドレス)とか
192.168.3.1(※これは環境による。Host側のデフォルトゲートウェイでGest側にDNSサーバーとして設定されるもの)
が物理的に見えないのでよくわからん…の状態でした。

現象

Guest OSのCentOSからping 8.8.8.8は通るのだけれどもping google.comは通りませんでした。
DNSを疑いましたが、/etc/resolve.confを自動で書き換えないように設定したのち、
/etc/resolve.confをGoogleのDNS 8.8.8.8にしても改善せず…。

環境

仮想ソフト: Virtual Box 5.1.22
Host OS: Windows 10 (1607)
Guest OS: CentOS 6.9 minimal
※別途VMWare Playerも入れてあります。

解決方法

私の環境での解決法は、VMWare Playerが入っていたので
Virtual Boxを両方アンインストールして
もう一度Virtual Boxをインストールしました。
他にもいろいろついでにソフトを消していましたが、おそらくこの2つが原因です。
なにかネットワーク設定が衝突していたのかもしれません…
アンインストールするとVMWare PlayerとVirtual Boxが作るネットワークは消えています。
そしてもう一度Virtual Boxで一からCentOS 6.9のminimalを入れます

その他起きたこと

再インストール後、なぜかChromeだけでネットに繋がりません。
ルータを再起動してもダメでした。
そしたらこのコマンド打ったら治りました。
Chromeが突然ネットに繋がらなくなくなった!そんな時の解決法はコレだ! | 電気通う

> netsh winsock reset

やはり……VMWare PlayerとVirtual Boxがなにかしていたのかな…。

作り直した結果

$ ping 8.8.8.8
=> 成功
$ ping google.com
=> 成功
$ curl http://www.yahoo.co.jp
=> 成功

MacでSAStrutsの環境構築とチュートリアルのセットアップ

f:id:fa11enprince:20170106160736j:plain SAStrutsのチュートリアルのセットアップ方法のMac版です。 過去記事はこちら fa11enprince.hatenablog.com

eclipseをインストールします

ダウンロードしてインストールします。 ちなみにMacだといろいろついているpleiades All in Oneはないので 普通にJava EE用のインストーラーを落としてください。 https://eclipse.org/downloads/
workspaceは ~/eclipse/jee-neon/Eclipse.app/Contents/Eclipse/workspace
とかのほうがいいです。場所はDocuments以外だとどこでもいいと思います。
DocumentsだとiCloud配下になってしまうので(Sierra以降) iCloudの配下にあると同期の関係でなぜかCleanしてもファイルが最新にならないという問題が置きます。 El CapitanまでならDocuments配下にworkspaceがあってもいいと思います。

Tomcatのインストール

homebrewの導入は簡単なので割愛します。
homebrewを使って以下のコマンドを実行します

$ brew install tomcat  

/usr/local/Cellar/tomcat/8.5.9
にインストールされます。

Super Agile Strutsチュートリアルをインポートします

ここからダウンロードします
http://sastruts.seasar.org/download.html

ダウンロードしたものをEclipseにインポートします
まずはファイルを解凍してそれをインポートします。
File > import > General > projects from Folder or Archive

Seasar2のプラグインを入れておきます。

Help > Install New Software > add
Name : Seasar Plugin 3.3
Location: http://eclipse.seasar.org/updates/3.3/
チェックするのはDolteng, ResourceSynchronizer, SAStrutsPluginだけです。

An error occurred while collecting items to be installed
session context was:
が出たら
http://stackoverflow.com/questions/14866656/can-not-install-android-adt-21-1-on-eclipse-juno-windows-7-after-upadate-to-sd/14896322#14896322
を参考に一番下のチェックConcat all update sites during install to find required softwareを外します。

Tomcatプラグインを最新のものをいれる

Market Placeより
Eclipse Tomcat Plugin 9.1.2をいれる

プロジェクトを動的モジュールに変換します

プロジェクトを右クリック Configure(構成) > Convert to Faceted form …
Dynamic Web Module(動的Webモジュール)に
これでSeasar2のコンパイルが通るはず

サーバの作成

サーバービューから新規作成
Apache > Tomcat 8.5
を選ぶ
Tomcat installation directoryに下記PATHを貼り付け

/usr/local/Cellar/tomcat/8.5.9/libexec

そのあと、
sa-struts-tutorialのwarを追加します。 ※インストールしたパスを忘れてしまった場合は brew info tomcat でわかります。最後にlibexecをつけましょう。 ちなみにですがこのパス/usr/localはFinderだとCtrl+Shift+Gじゃないとアクセス出来ないと思いますので。。。

もう一度プロジェクトを右クリック

右クリック > Properties(プロパティ) > Project Facets(プロジェクトファセット)
Dynamic Web Module(動的Webモジュール) > 右側のRuntimeで
Apache Tomcat v8.5をチェック

デプロイメントアセンブリーの変更

また、プロジェクトを右クリック > Properties(プロパティー)で
Deployment Assembly(デプロイメント・アセンブリー)を選択します。
/WebContent /というのがあるので除去します。

追加ボタンよりフォルダーを選択します。
/src/main/webapp でデプロイ先を / にします。

サーバーを起動します

サーバービューの右クリックから起動して
ブラウザから
http://localhost:8080/sa-struts-tutorial/
にアクセスできればOKです。

ちなみにhttp://localost:8080/ にアクセスすると404になりますが、気にしないでください。
https://teratail.com/questions/11096 基本的にここまででOKです。

動かしたときにrequestのログが出ないようにします

ここは追加です。 web.xmlのrequestDumpFilterに次のを追加します。

    <filter>
        <filter-name>requestDumpFilter</filter-name>
        <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class>
        <init-param>
            <param-name>beforeContextAttribute</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>afterContextAttribute</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>

init-paramを2つ追加します。

猫マークからTomcatを起動したい&Tomcatプロジェクトのほうが何かと便利って場合

追加で設定をします。
eclipseのサーバービューだと何かと不便があるので、次のように追加で設定します。

これをするとEclipseの上側にある猫マークでTomcatを起動できます。 環境設定から

Tomcatバージョン:  
Tomcat version 8.x
Tomcat Home:  
/usr/local/Cellar/tomcat/8.5.9/libexec

Applyを押します。
次にプロジェクトの設定をします。

プロジェクト右クリック  
Properties >Tomcat  
Tomcatプロジェクトにチェック  
コンテキスト名: sa-struts-tutorial  
Webアプリケーションルートとするサブディレクトリ:  
/src/main/webapp

Applyを押して終了です。 この場合猫マークが使えます。