- 投稿日:2019-08-29T23:29:37+09:00
whitespaceがカオスな環境でgit commitする
※imgなんかのバイナリがあれば先にaddしてから
git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero
git commit
- 投稿日:2019-08-29T21:29:37+09:00
Gitで今はコミットしたくないときはgit stash
対象としている人
- Gitを使っていてブランチを切り替えたいけど、コミット前の変更内容があってエラーが出た
- コミット前の変更内容があってリセットはしたくないけど、一旦Git上から退避させたい
- 一旦退避させた内容を後で取り出したい
という様な人
解決方法
git stash
です。筆者は普段Sourcetree(Gitがわかりやすく操作できるソフト)を使っているのですが、git stashはターミナルからで十分わかりやすいので、ターミナルから行います。Sourcetreeでやる方法があるのかは不明です。
git stashで使うのは4つ
git stash
・・・変更内容の退避を実行するgit stash list
・・・git stashで退避してあるものを確認するgit stash apply
・・・git stashで退避してあるものを取り出すgit stash drop
・・・git stashで退避してあるものを消すgit stash
退避の実行は
git stash
です。
対象のディレクトリに移動して実行しましょう。my_mac$ cd project my_mac$ git stash Saved working directory and index state WIP on master: e6eeee8 first commitこれでコミット前の変更内容がなくなりました。
消えたのではなく、一時避難しているだけなので安心してください。git stash list
git stash list
で退避している内容を確認できます。my_mac$ git stash list stash@{0}: WIP on master: e6eeee8 first commit実行後に表示される
stash@{0}
というところが重要です。
この後でさらに変更があり、git stashした場合はstash@{1}
となります。
その後さらに、、となればstash@{2}
、stash@{3}
、、、と{}の中の数字が増えていきます。my_mac$ git stash Saved working directory and index state WIP on master: e6eeee8 first commit my_mac$ git stash list stash@{0}: WIP on master: e6eeee8 first commit stash@{1}: WIP on master: e6eeee8 first commitgit stah apply
退避していた内容をもう一度反映したくなったら
git stash apply stash@{対象の数字}
です。my_mac$ git stash apply stash@{0}
stash@{0}
のところにはgit stash listで確認した中で、自分が退避させている内容を戻したい番号を入れましょう。git stash drop
退避していた内容が不要になったら
git stash drop stash@{対象の数字}
します。my_mac$ git stash drop stash@{0}これで
stash@{0}
が消去されます。おわりに
Gitは使い方を知れば知るほど便利だな〜と日々実感しています。
- 投稿日:2019-08-29T16:51:29+09:00
【Git】Git入門前
はじめに
以前Gitについて社内説明会をすることになり、要点をまとめたので書きます。
「Gitって聞いたことあるけど…」という人向けの記事で、シンプルにまとめました。
使い方は説明していませんが、使い方のイメージまでは説明しています…。Gitとは?
・バージョン管理システム!
・GitHubではない!(GitHubとはGitを利用したWebサービス)
・ファイルの変更内容や変更履歴を管理!
・あとから古い状態に切り戻したりできる!バージョン管理システムとは?
ファイルに対して「いつ」「誰が」「何を変更したか」といった情報を記録することです。
ファイルそのものや変更履歴などの情報を保管しておく場所を「リポジトリ」と言います。リポジトリの管理方法
リポジトリの管理方法には「集中型バージョン管理システム」と「分散型バージョン管理システム」の2つがあります。Gitは「分散型バージョン管理システム」です。
集中型バージョン管理システム (Subversion)
1つのリポジトリを全員で共有し、1つのリポジトリに対してcheckoutやcommitを行うので、操作がシンプル。
動画など容量のでかいコンテンツの管理に向いてます。分散型バージョン管理システム (Git)
自分のPC上にローカルリポジトリを作成し、そのcommit内容を共有リポジトリに反映させる(push)仕組みで、やや複雑。
Gitを使うためには…
CUI
macOSはターミナル(linux)、windowsはコマンドプロンプト(dos)で操作します。
GUI
Sourcetree、TortoiseGit、GitHub DesktopなどのGitクライアントツールで操作します。
Gitの仕組み
ローカルリポジトリ
ユーザ一人ひとりが利用するために、自分の手元のマシン上に配置するリポジトリです。
リモートリポジトリ
専用のサーバ(Github、Bitbucket、Backlogなど)に配置して複数人で共有するためのリポジトリです。
使い方 (イメージ)
自分が作業したコードなどある程度のカタマリをローカルリポジトリに記録(commit)し、リモートリポジトリに保管(push)します。
メンバーも同様にpushしていれば、自分はリモートリポジトリから引っ張ってきて(pull)、自分のローカルリポジトリに付託します。さいごに
共同作業する場合は「ブランチ」を使うことでGitの効果が発揮されます。
「ブランチ」についてはまた時間のある時に投稿しようと思います。
- 投稿日:2019-08-29T16:35:33+09:00
はじめてのGit(clone, add, commit, push)
ideagearの林です。
今回は既存のGitHubプロジェクトからcloneし、テストファイルを作成、add、commit、pushして変更を反映させる方法をまとめます。
環境
Windows10 64ビット版(32ビットでも可)
Git SCM の Git for Windows Setup版2.23.0 で実行する(インストール方法はこちら)
clone
リモートリポジトリをクローンして、コンピュータにローカルのコピーを作成する。
1 GitHubで、リポジトリのメインページへ移動する
3 Git Bashを開く
4
cd
コマンドでクローンしたいディレクトリに移動する(しなくてもよい)5
git clone
と入力、そのあとにコピーしたURLを貼り付けてEnterを押すこれでローカルにクローンが生成された。
add
変更のあったファイルやフォルダをステージングに登録する。
変更するデータのリストに加えるような認識。変更内容として、test というファイルを追加してみる。
1
ls
コマンドを実行し、クローンしたリポジトリの名前のフォルダがある事を確認する2 確認したら
cd フォルダ名
でディレクトリをクローンしたフォルダに移動する3 同様にして、新しいファイルを生成したいディレクトリに移動する(しなくてもよい)
4
touch test
と入力し、新ファイル"test"を作成5
git add test
と入力し"test"を登録するcommit
現在ステージングに登録されている変更内容をローカルリポジトリに記録する。
メールでいうと下書き保存のような認識。commitの前に名前とメールアドレスの登録が必要なので先にそれを実行する。
1
git config --global user.name "NAME"
NAMEを自分の名前に変更し、実行(ダブルコーテーションは消さないように注意)2
git config --global user.email ADDRESS
ADDRESSを自分のメールアドレスに変更し、実行3
git commit -m "test file"
test fileの部分は任意のコメントに変更し、実行するpush
変更が記録されたローカルリポジトリのデータをリモートリポジトリ(元データ)に反映させる。
メールでいうと送信のような認識。
- 1
git push origin master
これだけ。とりあえずこれで反映できる。詳しくは他の方がまとめてるのでそちらを参照。最後に
GitHubで変更したリポジトリを確認してみましょう。
選んだ場所に"test"というファイルができていれば成功です。おつかれさまでした。
- 投稿日:2019-08-29T16:27:08+09:00
CodeCommitの認証エラー(403)で躓いたのでドキュメントを読んで対応したときの作業ログ
Github でソースコードを管理している、サーバー環境は AWS で、 CodeCommit へ push したら CodePipelineが動くよう設定されている。
という状況で、CodeCommitにpush(もpullも)できず認証エラーで悩んだときの作業記録https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/troubleshooting-ch.html
AWSのドキュメントを読んだ
$ git config -l --show-origin |grep osxkeychain file:/usr/local/etc/gitconfig credential.helper=osxkeychaingitconfigの親玉が見つかったので、開いて編集
[credential] # helper = osxkeychainhelperの設定をコメントアウトした。
さらに
Keychain Access.app
で CodeCommit の該当のエントリー(有効期限が切れている)を削除。これで CodeCommit へは gitアクセスできるようになった。
しかし代わりに Githubへgitコマンドでアクセスすると、毎度ユーザー名とパスワードを聞かれるようになってしまった。
さすがにそれは煩わしい。~/.gitconfig へこれを追加
[credential "https://github.com"] helper = osxkeychain無事、いままでどおりにgithubを使えるように戻った。
個人的にはGitlabも使うのでgitlab.comへも同じように osxkeychain を使うように設定しておいた。
- 投稿日:2019-08-29T12:54:44+09:00
gitで幽霊ブランチが手元に残る件
マージするときにブランチを削除しても
git branch -a
で消したはずのブランチが表示されることがある。
この幽霊をローカルに適用するには以下のコマンドを叩く$ git remote prune origin
備考# branchの追跡状況を確認 $ git remote show origin # → 「stale (use 'git remote prune' to remove)」は削除して良さそう # fetch, pullするときにまとめて適用しちゃう $ git pull/fetch --prune
- 投稿日:2019-08-29T12:43:19+09:00
gitのインストールと起動方法
ideagearの林です.
Windowsでgitを使うために,Git for Windowsをインストールする手順をここにまとめます.
環境
Windows10 64ビット版(32ビット版でもインストールできる)
今回は Git SCM の Git for Windows Setup版2.23.0 をダウンロードする.インストーラーをダウンロード
ここからダウンロードする.
自動でダウンロードされるはずだが,されない場合はclick here to download manuallyをクリックしてダウンロードできる.
WindowsOSが32ビット版の場合は,32-bit Git for Windows Setupをクリック.インストール
ダウンロードしたファイルを開き,インストーラーを起動する.
とりあえず使えるようにするのが目的なので各説明は簡略化する.(詳しくはまとめている方がいるのでこちらを参照)
基本デフォルトでも構わない.
(写真はWindows10の画面ではないが,変わりはないので気にしないで良い)ライセンスの確認
内容を確認してNextを押す.
コンポーネントの選択
インストールの仕様を選択できる.
Additional Icons- On the Desktopにチェックを入れると,デスクトップにショートカットが生成されるのでおすすめ.
その他も選択したらNext.エディタの選択
デフォルトで使うエディタを選択できる.
今回はそのまま.Windowsの環境変数の設定
上:インストールする"Git Bash"からのみgitコマンドを使用する場合.
中:Windowsのコマンドプロンプトからgitのコマンドを使用する場合.
下:Windowsのコマンドプロンプトからgit以外ののコマンドも使用する場合.
デフォルトの真ん中を選択.SSLライブラリの選択
そのままNext.
改行についての設定
Checkout Windows-style, commit Unix-style line endings
チェックアウト時に改行コードはCR LFに変更され、コミット時には全てLFに変換される.
Checkout as-is, commit Unix-style line endings
チェックアウト時は改行コードについては何もしない、コミット時には全てLFに変換される.
Checkout as-is, commit as-is
改行コードについては何もしない.(https://qiita.com/toshi-click/items/dcf3dd48fdc74c91b409 より引用)
Git側で何も変換しない下を選択.
コンソールの設定
Gitで使用するコンソールを設定する.
上:Cygwinで使用されているMinTTYを使用.
下:Windowsの標準コンソールを使用.
今回は上を選択した.gitconfigについての設定
Enable file system caching
git status時などでの応答速度を改善するfscacheキャッシュを有効にするかしないかオプション
Enable Git Credential Manager
GitHub等にアクセスする際の二段階認証に対応するかのオプション
Enable symbolic links
シンボリックリンクの使用/不使用のオプション(上記のサイトより引用)
今回はとりあえず上と真ん中にチェックをいれた.
difftoolの設定
ファイル比較用ツールの diff を利用できるが,正式リリースしていないため動作は保障されていない.
任意で選択し,Installをクリック.インストール完了
しばらくするとインストール完了のウィンドウ(Completing the Git Setup Wizard)が表示される.View Release Notesにチェックが入っているが,リリースノートの確認が必要なければチェックをはずしてFinishをクリック.
起動
インストール時にデスクトップにショートカットを生成していれば,それをダブルクリックで起動できる.
生成していない場合は,Git Bashを検索しましょう.お疲れ様でした.
- 投稿日:2019-08-29T00:18:42+09:00
特定ディレクトリ以下のファイルを全てgit update-index --assume-unchangedするシェルスクリプト
概要
かなり特殊ケースだが、自分は遭遇した。
- ローカルの開発環境で本番の再現をしたい
- DB はダンプを取って FTP で持ってきた
- アップロードされている現状の画像は欲しいが FTP だと面倒なので
git clone
時に持って行きたい- 今後アップロードされる画像は git 管理対象にしたくない
git update-index --assume-unchanged
については下記の記事が参考になる。既に git 管理しているファイルをあえて無視したい - Qiita
コード
assume-unchanged.sh
みたいな名前で作る。#!/bin/sh array=(`ls -ald $(find "$1") | awk '$1 !~ /d/ {print $9 }'`) for var in ${array[@]} do var=`printf ${var}` echo $var git update-index --assume-unchanged $var done実行と確認
本番で画像アップロードの変更があったら下記スクリプトを実行する。
git ls-files -v
の先頭が小文字になっていれば成功。$ chmod 700 assume-unchanged.sh $ ./assume-unchanged.sh ディレクトリパス $ git ls-files -v
- 投稿日:2019-08-29T00:04:32+09:00
git の色々
git clone
最初の一回目でremote-repo からlocal-repoに引っ張ってくることが
git clone
できる
git clone
をするとoriginが自動的に作られる。
originはremote-repoの名前。git clone はコミッターが権限を持たないとcloneできない。fork
他人のremoteリポジトリを自分のremoteリポジトリとしてコピーする。
forkはオープンソースで使われている。例えとして、atomなどがいっぱいforkされて、pullリクエストがとばされている。git cloneとforkの違いについて
git cloneはgithubなどのリモートリポジトリからURLを引数としてディレクトリをとってくる。こちらはコミッター(URLを発行した人)が権限を渡さなければpushできない。少数のチーム開発に向いている。
対象的にforkはリモートリポジトリが公開されている場合、いろんな人がこのサービスいいなと思ったとする(例えばatomなど)、forkをした人はリモートリポジトリをコピーできる。そこで、新機能などを追加して元のサービスにプルリクエストをおこなう。みんなで新機能を使って盛り上げよう的な!
git pull
git pull
はfetchとmergeを実行している。
fetchとはremote-repoからlocal-repoの間に存在するremote-repo追跡に引っ張ってこれる。git push
local-repoからremote-repoにpushしている。
git marge
現在のブランチに他のブランチのコミットを吸収すること。
git config --list
git に登録した情報一覧を表示できる。