20190829のGitに関する記事は9件です。

whitespaceがカオスな環境でgit commitする

※imgなんかのバイナリがあれば先にaddしてから
git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero
git commit

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitで今はコミットしたくないときはgit stash

対象としている人

  • Gitを使っていてブランチを切り替えたいけど、コミット前の変更内容があってエラーが出た
  • コミット前の変更内容があってリセットはしたくないけど、一旦Git上から退避させたい
  • 一旦退避させた内容を後で取り出したい

という様な人

解決方法

git stashです。

筆者は普段Sourcetree(Gitがわかりやすく操作できるソフト)を使っているのですが、git stashはターミナルからで十分わかりやすいので、ターミナルから行います。Sourcetreeでやる方法があるのかは不明です。

git stashで使うのは4つ

  1. git stash・・・変更内容の退避を実行する
  2. git stash list・・・git stashで退避してあるものを確認する
  3. git stash apply・・・git stashで退避してあるものを取り出す
  4. 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 commit

git 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は使い方を知れば知るほど便利だな〜と日々実感しています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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の効果が発揮されます。
「ブランチ」についてはまた時間のある時に投稿しようと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

はじめての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で、リポジトリのメインページへ移動する

  • 2 Clone or downloadをクリックし、その下にあるURLをコピーする
    image.png

  • 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"というファイルができていれば成功です。

おつかれさまでした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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=osxkeychain

gitconfigの親玉が見つかったので、開いて編集

[credential]
#       helper = osxkeychain

helperの設定をコメントアウトした。

さらに Keychain Access.app で CodeCommit の該当のエントリー(有効期限が切れている)を削除。

これで CodeCommit へは gitアクセスできるようになった。

しかし代わりに Githubへgitコマンドでアクセスすると、毎度ユーザー名とパスワードを聞かれるようになってしまった。

さすがにそれは煩わしい。

~/.gitconfig へこれを追加

[credential "https://github.com"]
   helper = osxkeychain

無事、いままでどおりにgithubを使えるように戻った。

個人的にはGitlabも使うのでgitlab.comへも同じように osxkeychain を使うように設定しておいた。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitのインストールと起動方法

ideagearの林です.

Windowsでgitを使うために,Git for Windowsをインストールする手順をここにまとめます.

環境

Windows10 64ビット版(32ビット版でもインストールできる)
今回は Git SCM の Git for Windows Setup版2.23.0 をダウンロードする.

インストーラーをダウンロード

ここからダウンロードする.
git_download.png

自動でダウンロードされるはずだが,されない場合はclick here to download manuallyをクリックしてダウンロードできる.
WindowsOSが32ビット版の場合は,32-bit Git for Windows Setupをクリック.

インストール

ダウンロードしたファイルを開き,インストーラーを起動する.
とりあえず使えるようにするのが目的なので各説明は簡略化する.(詳しくはまとめている方がいるのでこちらを参照)
基本デフォルトでも構わない.
(写真はWindows10の画面ではないが,変わりはないので気にしないで良い)

ライセンスの確認

image.png

内容を確認してNextを押す.

コンポーネントの選択

image.png

インストールの仕様を選択できる.
Additional Icons- On the Desktopにチェックを入れると,デスクトップにショートカットが生成されるのでおすすめ.
その他も選択したらNext.

エディタの選択

image.png

デフォルトで使うエディタを選択できる.
今回はそのまま.

Windowsの環境変数の設定

image.png

:インストールする"Git Bash"からのみgitコマンドを使用する場合.
:Windowsのコマンドプロンプトからgitのコマンドを使用する場合.
:Windowsのコマンドプロンプトからgit以外ののコマンドも使用する場合.
デフォルトの真ん中を選択.

SSLライブラリの選択

image.png

そのままNext.

改行についての設定

image.png

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側で何も変換しない下を選択.

コンソールの設定

image.png

Gitで使用するコンソールを設定する.
:Cygwinで使用されているMinTTYを使用.
:Windowsの標準コンソールを使用.
今回は上を選択した.

gitconfigについての設定

image.png

Enable file system caching
git status時などでの応答速度を改善するfscacheキャッシュを有効にするかしないかオプション
Enable Git Credential Manager
GitHub等にアクセスする際の二段階認証に対応するかのオプション
Enable symbolic links
シンボリックリンクの使用/不使用のオプション

(上記のサイトより引用)

今回はとりあえず上と真ん中にチェックをいれた.

difftoolの設定

image.png

ファイル比較用ツールの diff を利用できるが,正式リリースしていないため動作は保障されていない.
任意で選択し,Installをクリック.

インストール完了

しばらくするとインストール完了のウィンドウ(Completing the Git Setup Wizard)が表示される.View Release Notesにチェックが入っているが,リリースノートの確認が必要なければチェックをはずしてFinishをクリック.

起動

image.png

インストール時にデスクトップにショートカットを生成していれば,それをダブルクリックで起動できる.
生成していない場合は,Git Bashを検索しましょう.

お疲れ様でした.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

特定ディレクトリ以下のファイルを全て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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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をした人はリモートリポジトリをコピーできる。そこで、新機能などを追加して元のサービスにプルリクエストをおこなう。みんなで新機能を使って盛り上げよう的な!
スクリーンショット 2019-08-30 15.07.15.png

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 に登録した情報一覧を表示できる。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む