20190330のGitに関する記事は6件です。

「.gitignore」をコピーし損ねてGithub desktopに膨大な変更履歴があがった話

初投稿です。
初学者の私がハマった不具合の内容と原因を共有します。

[内容]

Gitでリポジトリを作成しRailsファイルを編集していたところ、viewファイルを2~3ついじっただけでキャッシュやログのデータが1,000件以上Github desktop上にあがってしまった。

[経緯]

  • 使用するRailsアプリケーション(仮にAとする)をrails new Aコマンドで作成した。

  • そのディレクトリとは別に空のディレクトリを作成(仮にA'とする)、そのディレクトリにgit initをしてローカルリポジトリとした。

  • Railsファイル(A)をカットアンドペーストしA’に貼り付けてA’内で作業した。
    image.png上の画像の様にfinderで切り取りしてAからA'にそのままRailsファイルを貼り付けた。

[原因]image.png

実際は隠しファイルの.gitnoreは選択されていませんでした...。
.gitignore内にログやキャッシュを追跡対象から外す記述がされているので、このファイルがないとGitは全ての変更を記録してしまい、私の様に1,000件以上の変更履歴を残すことになってしまいます...。
(※因みに隠しファイルは「⌘ + shift + .(ドット)」で表示できます)

[対応]

とりあえず、Railsディレクトリ内に「.gitignore」を作成。何を追跡対象から外すのが良いかは全く見当が付かなかったので、下記リンクからRails.gitignoreのテンプレートを使用しました。

以下、色々な.gitignoreのテンプレートが載っているリポジトリです。
https://github.com/github/gitignore

また、.gitignoreを編集しても、既にGitが記録してしまっているものに対しては反映されません。ファイルを指定して追跡対象から外すこともできますが、私の場合キャッシュデータが膨大だった為、以下のコードでまとめて追跡対象から除外しました。

git rm --cached `git ls-files -i --full-name --exclude-from=.gitignore`

以下、参照させて頂いた記事です。

[参考記事]

https://qiita.com/yuuAn/items/b1d1df2e810fd6b92574
https://qiita.com/koppayashi/items/fa971b641770266af9a7

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

よく使うGitコマンド一覧

Gitとは

Gitはバージョン管理システム。(バージョンとは、コミットした時点のファイルやフォルダをセーブしたもの。)

メリット

Gitを使うことで、開発しているときに、自分が何を変更したかわからなくなったり、ファイルを消したりしてしまったときに、前回のバージョンへ戻ることができることである。また、GithubやBitbucketといったリモートリポジトリと組み合わせて使うことで、チーム開発に置いて非常に効率を上げることができる。

コマンド集

基本コマンド

・ローカルリポジトリの作成

$ git init

・変更をステージに追加

$ git add .

・変更をローカルリポジトリに追加

$ git commit

・ブランチを新規追加

$ git branch <新規ブランチ名>

・ブランチ名を変更

$ git branch -m <ブランチ名>

・ブランチの切り替え

$ git checkout <ブランチ名>

・ブランチの削除

$ git branch -d <ブランチ名>

・現在のGitの状態を確認

$ git status

・変更差分を確認

$ git diff

・変更履歴を確認

$ git log

変更の取り消し

・作業中ファイルの変更取り消し

$ git checkout -- .

・ステージしたファイルの変更取り消し

$ git reset HEAD .

・直前のコミットの取り消し

$ git commit --amend

リモートリポジトリとのやりとり

・設定しているリモートリポジトリを表示

$ git remote

・リモート名を登録(これ以降URLの代わりにリモート名を使用できる)

$ git remote add <新規リモート名> <リモートURL>

・リモート名を変更

$ git remote rename <旧リモート名> <新規リモート名>

・リモート名を削除

$ git remote rm <リモート名>

・リモートリポジトリへ変更を送信

$ git push <リモート名> <ブランチ名>

・リモートリポジトリからローカルリポジトリに情報を取得

$ git fetch <リモート名>

・ローカルリポジトリからコンピュータ上に情報をコピー

$ git merge <リモート名/ブランチ名>

・リモートリポジトリからコンピュータ上に情報をコピー(fetch + merge)

$ git pull <リモート名> <ブランチ名>

・リモートリポジトリからコンピュータ上にコピー(init + pull)

$ git clone

作業中ファイルの一時避難

・作業中ファイルを一時避難

$ git stash

・一時避難中ファイルを表示

$ git stash list

・一時避難中ファイルを復元

$ git stash apply --index

・避難したファイルの削除

$ git stash drop --index

その他

・タグの一覧表示

$ git tag

・タグの作成

$ git tag -a [タグ名] -m "[メッセージ]"

・タグをリモートリポジトリに送信

$ git push [リモート名] [タグ名]
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

わかばちゃんと学ぶGit使い方入門学習メモ

会社では、CVSとSVNしか使用したことがなくGitを使ってみたいと思い学習をしてみました。
学んだことをメモ

Gitってなーに

  • バージョン管理システムのこと
  • バージョン管理システムには、分散型と集中型がある。

分散型と集中型

バージョン管理システムには分散型(例:CVS、SVN)と集中型(Git、Marcurial)がある。
・分散型:リモートリポジトリから各自のPCにリポジトリを持ち作業を行う。
・集中型:リモートリポジトリをみんなで一緒に見てつかう。

分散型はコミットしても自分のPC上のリポジトリへの更新になるが、集中型はコミットすると即座にみんなが見ることができるリモートリポジトリに反映される。

用語:Git編

  • リポジトリ  :ファイルやディレクトリの状態が保存されている場所
  • コミット   :変更をローカルリポジトリに反映させる
  • チェックアウト:指定したコミット時の状態にローカルリポジトリの状態を戻す

用語:Github編

  • Github    :Gitの機能を使用したソフトウェア開発プロジェクトのためのソースコード管理サービス
  • フォーク   :他人が作成したリモートリポジトリを自分のアカウントのリモートリポジトリへコピーすること
  • クローン   :リモートリポジトリをローカルリポジトリに落としてくること
  • プッシュ   :ローカルリポジトリの変更をリモートリポジトリへ反映させること
  • プル     :リモートリポジトリの状態をローカルリポジトリへ反映させること
  • プルリクエスト:自分がした変更を他者のリポジトリに反映してもらう依頼すること
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitのやりなおし、特殊ケース

Git やりなおし

について、いろいろなケースについて検索したりすると思います。

一般的なケース

これらはQiitaでも

などの記事が参考になりますし、その他いろいろあります。

ちょっと特殊なケース

これについて、気付きのあったものを記載していこうかなと。

commit author

よくあるのは1

$ git commit --amend --author="Tsuyoshi CHO <Tsuyoshi.CHO@Gmail.com>"
# あるいは
$ git filter-branch ...

系ですが、ある記事2により、以下のほうが良さそうだと気付きました。

$ git config --local user.name "Tsuyoshi CHO"
$ git config --local user.email "Tsuyoshi.CHO@Gmail.com"
$ git commit --amend --reset-author

※これについては gitの自分アカウント設定(リポジトリローカル) - Qiita も参照

たしかに、せっかくconfigを直したんだから、その設定でリセットしてほしいですよね。

もし複数あったりしても、現在ブランチを別名を付けてgit checkout -b <another>、その履歴をcherry-pickしつつ直したほうが、問題を考えなくていい分楽かもしれません。

git lfs化

大きなファイルを入れてしまった場合、LFSにしたくて

$ git filter-branch ...

とかで履歴改変をがんばること3になりますが...、記述が面倒なので、子細はリンク先を見てください。

これについて、git lfs migrateを使う4という方法があります。
いつごろ普通に使えるようになってたのかは不明ですが。

こうすると

$ git clone
$ git lfs migrate import --include-ref master --include="*.jpg"
# .gitattributesでのtrack設定がさもあったかのように履歴を改変する

と、改変を自動でやってくれるので、問題が発生しずらいです。

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

github ことはじめメモ

github使う時に最初にやること

# 初期化
git init

# 設定
git config user.name ユーザー名
git config user.email eメールアドレス

##########################################
# ssh接続したい場合(HTTPSだと毎回ログイン情報を問い合わせられる)
# 1: ローカルで公開鍵と秘密鍵を生成します
#   -t: 暗号化方式 -b:鍵の長さ -C:コメント githubではメールアドレス
#   最初にsshキーの保存場所、次にパスフレーズの入力を求められます
ssh-keygen -t rsa -b 4096 -C "メールアドレス"

# 2: sshの保存先にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が保存されているので
#    公開鍵をgithubに設定する  
#    右上のアカウントメニュー→SSH and GPG keys→new SSH key


# 3: gitbashでgithubに接続する
ssh -T git@github.com

# 以下の内容を聞かれます
# yesを入力
Are you sure you want to continue connecting (yes/no)? yes
# パスフレーズを入力
Enter passphrase for key 'sshキーを保存した場所/.ssh/id_rsa':
#Hi xxxxxx! You've successfully authenticated, but GitHub does not provide shell access.
##########################################

# 追加 
git add -A   

# コミット
git commit -m "initialize repository"

# remote
git remote add origin リポジトリurl

# push
git push -u origin --all
# git addとcommitを同時に
git commit -a -m "Improve the README file"

間違って消してしまった場合

直前のコミットの内容でローカルリソースで上書き

git checkout -f

branch作って、ソース編集 masterにマージ

# branch作成し、選択
git checkout -b ブランチ名

# branchの一覧を表示(確認用)
git branch

###### ソース編集

# add & commit
git commit -a -m "コミットメッセージ"

# masterに切り替え
git checkout master

# branchをmasterにマージ
git merge branch名

# branchを削除。ただし、残しておいても問題はない
# 
git branch -d ブランチ名

Herokuにデプロイ

# 前提条件: 最初の手順でssh接続設定している
# heroku CLIをインストールしている

# ログイン
heroku login

# アプリケーション作成
heroku create

# herokuにデプロイ
git push heroku master
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

github 個人メモ

github使う時に最初にやること

# 初期化
git init

# 設定
git config user.name ユーザー名
git config user.email eメールアドレス

##########################################
# ssh接続したい場合(HTTPSだと毎回ログイン情報を問い合わせられる)
# 1: ローカルで公開鍵と秘密鍵を生成します
#   -t: 暗号化方式 -b:鍵の長さ -C:コメント githubではメールアドレス
#   最初にsshキーの保存場所、次にパスフレーズの入力を求められます
ssh-keygen -t rsa -b 4096 -C "メールアドレス"

# 2: sshの保存先にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が保存されているので
#    公開鍵をgithubに設定する  
#    右上のアカウントメニュー→SSH and GPG keys→new SSH key


# 3: gitbashでgithubに接続する
ssh -T git@github.com

# 以下の内容を聞かれます
# yesを入力
Are you sure you want to continue connecting (yes/no)? yes
# パスフレーズを入力
Enter passphrase for key 'sshキーを保存した場所/.ssh/id_rsa':
#Hi xxxxxx! You've successfully authenticated, but GitHub does not provide shell access.
##########################################

# 追加 
git add -A   

# コミット
git commit -m "initialize repository"

# remote
git remote add origin リポジトリurl

# push
git push -u origin --all
# git addとcommitを同時に
git commit -a -m "Improve the README file"

間違って消してしまった場合

直前のコミットの内容でローカルリソースで上書き

git checkout -f

branch作って、ソース編集 masterにマージ

# branch作成し、選択
git checkout -b ブランチ名

# branchの一覧を表示(確認用)
git branch

###### ソース編集

# add & commit
git commit -a -m "コミットメッセージ"

# masterに切り替え
git checkout master

# branchをmasterにマージ
git merge branch名

# branchを削除。ただし、残しておいても問題はない
# 
git branch -d ブランチ名

Herokuにデプロイ

# 前提条件: 最初の手順でssh接続設定している
# heroku CLIをインストールしている

# ログイン
heroku login

# アプリケーション作成
heroku create

# herokuにデプロイ
git push heroku master
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む