何者にもなれていない5年目のエンジニアブログ

git におけるconflictの解消法

gitで初めてconflictが起きた時、本当に何をしていいかパニックに陥ります。

gitでconflictが起きた時に、ともに戦える「コマンド」のつくり方 、教えます

って別にそんなおおげさなものではないのだけど。。

方法1. とりあえずgit status 話はそれからだ。

そうするとどの部分がconflictが起きてるかがわかる。 そして該当のファイルを開き、conflictしている部分を解消する。

方法2. git reset --hard HEAD^

ごめん!今の無しっていうコマンド。1個前に戻ってるだけ。共同開発環境ではトラブルの原因になるので、よく周りをみること。

git pushとgit pullの挙動 (引き数ありと無しでどう違うのか)

git push とgit pull が引き数の有無によってどのように振る舞いが変わるか

1. git pullの有効範囲

ローカル:今チェックアウトしているブランチ(カレントブランチ)がb1 で master、b2とブランチがあり、 リモート:master、b1、b2、b3とブランチがある状態

問:この時、git pullすると何を取得し、何が更新されるか

解:今チェックアウトしているブランチ(カレントブランチ)のみ適応

引数を入れないで、git pullするとカレントブランチのb1がリモートにある場合のみ、カレントブランチb1の情報がfetch、mergeされる。 トラッキングブランチを持ってきて、今いるカレントブランチに該当するブランチがある場合、merge(rebase)される。

参考:http://d.hatena.ne.jp/hokaccha/20120404/1333507076

⬆ここでもっと詳しい挙動が書かれてます。

2. git pushの有効範囲

ローカル: カレントブランチb1、 master、b2、b3が存在 リモート:master、b1、b2が 存在

問: この時、git pushするとどうなるか?

解:ローカルのカレントブランチに関係ない。

ローカルに存在するブランチで、リモートに存在するブランチすべてにプッシュされる。(この場合、リモートにあるmaster、b1、b2が該当)

ありがちなWeb site攻撃方法とその対策

代表的なものが三つある。どんな教科書にも書いてありますが

①. CSRF
②. SQLインジェクション
③. クロスサイトスプリプティング

CSRF

CSRFとは:クロスサイト・リクエスト・フォージェリーとは、攻撃者が、特定のサイト(攻撃対象)に意図しないデータを送信するようなページを用意し、利用者がそのページにアクセスすると攻撃者が用意したデータが利用者の意図に関わらず、自動的特定のサイトに送信されてしまう攻撃のことを指す。

CSRFの対策:鍵を用いることで対策を行う。鍵を持っていないリクエストは認めず、また、鍵は容易に偽造できないようなものとする。偽造ができないようなデータを鍵としてリクエストフォームに埋め込んでおき、受け取る際はその鍵の提示が必要であるような受信プログラムを作成する。鍵を作るための方法は、一方向性関数(Digest::SHA1)を用いるといった方法がある。

②.SQLインジェクション

SQLインジェクションとは:SQLインジェクションは、プログラム内で期待している値がデータであるにも関わらず、入力データをSQL ステートメントとして解釈してしまい、本来参照することのできないデータベース内の情報(テーブル名など)を得ることができてしまうなどといっ動作を指す。

SQLインジェクションの対策: ・入力データを完全に「データ」として扱い、ステートメントとして扱わないようにプログラムを記述する。 プレイスフォルダーはデータとして扱われ、ステートメントとしては扱われないため、DBI モジュールのデータベースハンドラの parepare()メソッドに指定する SQL 文中に、"?"を含め、それをプレイスフォルダーとして扱う。

③クロスサイト・スプリプティング

クロスサイト・スプリプティングとは:利用者に信頼されているであろうサイトや有名なサイトのネームバリューを悪用し、攻撃者がそのサイトに JavaScriptや入力フォームなどの悪意のあるコードを埋め込むことで、プライバシー情報を盗みだすこと。 クロスサイトスプリプティングの対策:クロスサイトスクリプティングは、HTMLを他のサイトに送信することで成立するため、送信されてくる HTMLデータをサニタイジングかスクラビングすることで防げる。 スクラビングは、HTML::Scrubberを使用し、すべてのタグを削除するといった方法を用いる。また、サニタイジングは、escapeHTML()を使用し、特殊文字を無力化させるといった方法を用いる。

git commitの過去を改竄

git commitの歴史を変える方法

いくつかある。挙げてみると、

1. git commit --amend

2. git rebase -i

3. git rebase

4. git reset

5. git filter-branch

filter-branchとは

これは、大量のコミットの書き換えを機械的に行うオプション。 これを使うとレポジトリの歴史上からコミットされたファイルを完全に抹消することができる。 filter-branchの—index-filterオプションを使って、全てのcommitを精査して対象のファイルを消せる。

6. git push -f

これも強制的に上書きするという意味では、過去の履歴を改変している。

7. git revert

該当するコミットの内容を消しているけど履歴には残る。

ギャップロック

ギャップロックとは

空のレコードにロックをかけた場合、空振りし、前にあるレコードと後ろにあるレコードの空白にロックがかかる現象 例: 20 30 とレコードが存在している所、25にロックをかける。 21から29までロックがかかる。

新年よりブログ始めました。

初めまして。

nikeです。

 

新年よりブログ始めました。

 

このブログの目的ですが、

「日々楽しく業務をこなすためには、休日に自己研鑽しなければっ、、、!!」

 

ということで休日中に自己研鑽した結果を書いていくようにしました。

 

目標は毎週更新ですっ。。!!(早速毎週更新できてないような気がするのは気のせいです!!)

 

また、第三者がみても分かりやすい文章を書くという練習にもなるため、できるだけ無関係な人でも、わかりやすく、かつ面白く書いていくようにします。

 

それではどうぞよろしくお願いします。