今さら聞けないGit 2021年06月02日

今さら聞けないGit 2021年06月02日
目次

最新コミットから差分のあるファイルをscpでサーバーにコピーする

たとえば、仮想マシン上にウェブアプリの実行環境を構築し、ファイル編集は手元で行って動作確認するケースなどを想定。

## コマンド

以下の例では、サーバーのアドレスが`192.168.56.101`で、ユーザー名が`alice`だとします。また、サーバーのホームディレクトリ直下に`abcproject`ディレクトリがあり、これ以下の階層は、手元のGitリポジトリと同一であるものとします。

“`bash
git diff –name-only | xargs -I ‘{}’ scp ‘{}’ alice@192.168.56.101:abcproject/{}
“`

## 解説

“`bash
git diff –name-only
“`

で最新コミットから差分のあるファイル名を、Gitリポジトリのルートからの相対パスで取得します。

“`bash
xargs command
“`

で標準入力をcommandの引数に渡します。
`-I`オプションは置換文字列の指定です。コマンド文字列中の置換文字列を標準入力で置き換えます。したがって、標準入力にたとえば`in

元記事を表示

Mac Git ブランチを作成してそのブランチにスイッチする独自コマンドを登録する

# 目的

– 一回実行しただけで`$ git branch`コマンドで作成したブランチにスイッチするコマンドを登録する方法をメモ的にまとめる

# 方法

1. 下記コマンドを実行して独自コマンドを登録するファイルを作成する。

“`terminal
$ vi ~/.bash_aliases
“`

1. 下記の内容を記載する。

“`~/.bash_aliases
function gbsw() {
git branch $1;
git switch $1;
}
alias gbsw=gbsw
“`

1. 下記コマンドを実行して.bash_profileのバックアップをとっておく。

“`terminal
$ cp ~/.bash_profile ~/.bash_profile_org
“`

1. 下記コマンドを実行して.bash_profileを開く。

“`terminal
$ vi ~/.bash_profile
`

元記事を表示

git clean

**FBI warning:** `git clean -df` 之后的文件无法恢复

`git clean -n`
是一次clean的演示, 告诉你哪些文件会被删除。 这个命令不会真正的删除文件,只是一个提醒。

`git clean -f`
删除当前目录下所有没有track过的文件。不会删除 `.gitignore`文件里指定的文件夹和文件,不管这些文件有没有被track过。

`git clean -f `
删除指定路径下的没有被track过的文件

`git clean -df`
删除当前目录下没有被track过的文件和文件夹

`git clean -xf`
删除当前目录下所有没有track过的文件。不管是不是`.gitignore`文件里面指定的文件夹和文件。

参考:

http://www.cnblogs.com/irocker/p/git-clean.html

https://loveky.github.io/2013/12/18/git-clean/

元記事を表示

Git Objects

“`
echo ‘123’ | git hash-object -w –stdin
# 3670911e6f6449df03f225ee1efb5acb8bfd4bc7

find .git/objects -type f
# .git/objects/36/70911e6f6449df03f225ee1efb5acb8bfd4bc7

git cat-file -p 3670911e6f6449df03f225ee1efb5acb8bfd4bc7
# zqw

####################

echo ‘version 1’ > ver.txt

git hash-object -w ver.txt
# 83baae61804e65cc73a7201a7252750c76066a30

find .git/objects -type f
# .git/objects/83/baae61804e65cc73a7201a7252750c76066a30

git cat-file -p 83baae61804e65cc73a7201a7252750c76066a30
#

元記事を表示

bash-git-prompt でレスポンスを改善するための設定メモ

git-prompt, git repo がでかいと遅い…

しかしある程度は git repo の status 表示とかしたい.
bash-git-prompt で必要最低限の設定にして運用します.

https://github.com/magicmonty/bash-git-prompt

“`
GIT_PROMPT_ONLY_IN_REPO=1
GIT_PROMPT_IGNORE_SUBMODULES=1
GIT_PROMPT_SHOW_UNTRACKED_FILES=no
GIT_PROMPT_FETCH_REMOTE_STATUS=0
“`

あたりを設定することでそこそこ快適になりました.

## zsh

zsh(macOS)の場合はこちら

macOS で git-prompt.bash の代わりに git-prompt.zsh を使い git status 表示を爆速にする
https://qiita.com/syoyo/items/72086ee5ee94c73b0cb0

元記事を表示

Railsチュートリアル(第6版) 第10章 ユーザーの更新・表示・削除

#第10章
今回の章では、Usersリソース用RESTアクションで未実装だった

・edit
・update
・index
・destroy

これらのアクションを追加する。
また、認可モデル(Authorization Model)についても触れていく。

そして、主にやる事は以下の事
・全てのユーザー一覧と、ページネーションを導入
・ユーザーの削除によって、データベースから完全に削除する機能
・管理ユーザーという特権クラスの作成

##ユーザーを更新する
新規登録の時の`new`アクションの代わりに、編集は`edit`アクションを作成し、
POSTリクエストに応答する`create`アクションの代わりに、`PATCH`リクエストに応答する`update`アクションを作成する。

新規登録の時との最大の違いは、ユーザー登録は誰でもできて、ユーザー情報を更新するのは、ユーザー自身に限られるという点。
また、認証機能に関しては、`before`フィルターを使えばアクセス制御可能。

###編集フォーム
流れとしては、Usersコントローラーに`edit`アクションを追加し、対応する`ed

元記事を表示

[git]特定ファイルのみgit stashする方法

# 方法

以下のようにパスは複数指定可能です

– ディレクトリパスを指定するとその配下のファイルがstashされます
– ファイルパスを指定するとそのファイルがstashされます

“`sh
git stash — path1 path2 …
“`

## 感想

個人的に利用頻度高めなgitコマンド
覚えておくとかなり便利です

元記事を表示

【Git】git push -u origin masterしたら、error: failed to push some refs to ‘https://github.com/ユーザー名/リポジトリ名.git’と怒られたときの対処法

症状

pushしたかったディレクトリではなく、一つ下位のディレクトリでpushまでしてしまいました。
再度、pushしたかったディレクトリで設定しなおして、pushしたところ下記のエラーが表示されてしまいました。

“`terminal:ターミナル
git push -u origin master
git: ‘credential-cache’ is not a git command. See ‘git –help’.
To https://github.com/ユーザー名/リポジトリ名.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘https://github.com/TKWebSE/near-eats.git’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is u

元記事を表示

HomebrewをLinuxサーバーにinstallする – git,curlのエラー

# 概要
sudoが使えない環境でLinuxサーバーにHomebrewをinstallする。Gitとcurlがアップデートできない問題を解決!

# 環境
CentOS 7
Linux

# レベル
導入レベル

# 解説

### 問題

Homebrewをinstallしようとしても、cURLとGitが古いと言われる。

“`
Error: Please update your system curl.
Minimum required version: 7.41.0
Your curl version: 7.29.0
Your curl executable: /usr/bin/curl

Error: Please update your system Git.
Minimum required version: 2.7.0
Your Git version: 1.8.3.1
Your Git executable: /usr/bin/git
“`
これは、Linuxシステムに元々入っていた古いversionのcURLとGitを読み込んでいるからである。

そのため、

元記事を表示

githubを使って最低限のgit操作をやってみよう(社内勉強会向け)

# 社内勉強会のためのgit入門

社内勉強会のため初心者向けにgitの説明をします。

## 目的

* gitの基本コマンド、clone, status, add, commit, pushを使ってみる
* githubでのfork, pull request, mergeをやってみる
* チーム開発をするのに必要なgit操作を最低限理解する

## 前提

事前作業によりgithubにアカウントを作り、公開鍵を登録して鍵を使ってgitコマンドを受け付けられるようにしておきます。

## 作業内容

### fork

次のイメージのForkボタンより自分のリポジトリにリポジトリのコピーを作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284697/90d67670-a790-5c22-f7f4-d7f44f0ffd51.png)

自分のアカウントにリポジトリのコピーができます。

![image.png](https://qiita-image-store.s3.

元記事を表示

[Git] 親ブランチをrebaseしたために子ブランチのコミット履歴がおかしくなって統合ブランチにマージできなくなってしまった場合の対処方法

# 事例

当初、こんな感じのブランチ構成とツリーになっているとします。

“`
main
┃ [コミットX]
┣ task-1
┃ ┣ task-2
“`

**トラブルが発生する流れ(例):**

1.task-1をmainにマージする際に、mainの最新コミットにrebaseしてからマージした。
2.task-2をmainにマージしようとしたら、コミット履歴がおかしくなっていて、最新mainと複雑なコンフリクトが発生!

“`
main
┃ [task-1を最新mainにrebaseしてマージ]
┃ [コミットX]

┃ ┣ task-2 →コミット履歴がおかしくなって最新mainにrebaseもマージもできない!
“`

こんなケースで、マージできなくなって困った時の対処方法です。
アジャイル開発で、一つの機能を複数人で作り込んでいく場合などはありがちなトラブルかと思います。

# 対処手順

## 1.最新のmainブランチを取得する。

`git fetch`
`git checkout main`
`git reset –hard origin/

元記事を表示

【Git】うっかり違うブランチで作業した内容を別のブランチに移したい

うっかり違うブランチで作業してしまったときの対処法です。

# Stashで一時退避させる
“`
$ git stash save
Saved working directory and index state WIP on xxx-branch: 47635c6 xxx-branch
“`

### *退避できているかを以下で確認できる

“`
$ git stash list
stash@{0}: WIP on xxx-branch: 47635c6 xxx-branch
“`

# 移したいブランチにcheckout

今回は新しいブランチを作ってそこに移します。ブランチ名`new-branch`は任意です。

“`
git checkout -b new-branch
“`

# stashした内容を反映する

該当のstash(今回は`stash@{0}`)を以下のコマンドで反映して完了です。
※popを使うとstashのlistからは消えます。すっきり保ちたいのでこちらを選択しました。

“`
$ git stash pop stash@{0}
“`

#

元記事を表示

gitのdateを未来の時間でcommitする方法

# gitのdateを未来の時間でcommitする方法

## commitする

commitについては通常通りなので割愛。

## 時間を修正する (committer date)

“`
git commit –amend –date=”未来の日時”
“`

“`
git commit –amend –date=”Sun May 31 2021 09:58:55″
“`

`:qw` を入力

## 時間を修正する (author date)

“`
git rebase HEAD~1 –committer-date-is-author-date
“`

## pushする

pushについては通常通りなので割愛。

元記事を表示

Git switch の補完ができなかった

## 課題

`git checkout` から `git switch` に変更しようと思って,

`alias gco=’git switch’` としていたのだが,補完が効かないので調べてみた.

## まとめ

– 掃除をした

“`shell-session
$ rm ~/.zfunctions/Completion/_git
$ tmux set-environment -gu FPATH
“`

## 環境

– zsh : 5.8 (brew)
– Mac

“`shell-session
$ where zsh
/usr/local/bin/zsh
/bin/zsh
$ zsh –version
zsh 5.8 (x86_64-apple-darwin19.6.0)
$ /bin/zsh –version
zsh 5.7.1 (x86_64-apple-darwin19.0)
“`

“`shell-session
$ which _git | head -1
_git () {
$ which _git-switch
_git-switch not

元記事を表示

Railsチュートリアル(第6版) 第9章 発展的なログイン機構

#第9章
第8章は基本的なログイン機構だったが、第9章ではブラウザを再起動してもログインできる「remember me」機能を追加する。
これには、**永続cookie**を使って機能を実装する。
さらにユーザの任意でログイン情報を記録できるようにする。

##Remember me 機能
ユーザーが明示的にログアウトを実行しない限り、ログイン状態を維持することができるようになるもの。
また、remember meのチェックボックスをログインフォームに追加する。

いつものようにトピックブランチを作成し、作業開始。

`$ git checkout -b advanced-login`

###記憶トークンと暗号化
ややこしい話になってくるので、まとめる。
大事なのは、特にこの2つ
・記憶トークンの生成
・記憶ダイジェストによるトークン認証

記憶トークンを活用して、記憶ダイジェストを認証させる。

Q:トークンとパスワードの違って?
A:トークンはコンピューだが作成・管理する情報。パスワードはユーザーが作成・管理する情報

`session`メソッドで保存した情報は、安全性が高い一

元記事を表示

Gitコマンド集

#記事について
前回gitを使う上での基礎知識をまとめたので、今回はgitのコマンドを記事にしました!

https://qiita.com/masarumosu/items/b954d9755c8d028d2369

##コマンド
####コマンド —local編
以下のコマンドはgitをローカルで使用する際に、知っておくべき基礎知識です!
仕組みさえ覚えてしまえば、とても便利なのでぜひ覚えましょう?

“`
① git init ⑥ git log
② git add ⑦ git rm
③ git commit ⑧ git branch
④ git status ⑨ git checkout
⑤ git diff ⑩ git reset
“`
####① git init
git initはローカルリポジトリを新規作成するコマンドです。
自分がバージョン管理したいワークスペースのルートディレクトリで、git initコマンドを使用することでルート直下に.gitディレクトリを作成します。.gitディレクトリによっ

元記事を表示

git 的一些特殊用法

>![](https://upload-images.jianshu.io/upload_images/47789-5ed116b5f073c234.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 同步github PR到本地

https://www.jianshu.com/p/e39d3ef3cc88

## GitHub开启二次验证后, 无法通过https的方式clone项目

https://www.jianshu.com/p/07ba0799d22f

## Github绑定GPG签名

https://www.jianshu.com/p/fee3b152699d

## clone 单独的branch

`git clone –branch –single-branch`

`git clone –branch gh-pages https://github.com/Semantic-Org/Semantic-UI-Docs docs-gh-pages

元記事を表示

为 git 同时添加两个远程仓库

>![](https://upload-images.jianshu.io/upload_images/47789-5ed116b5f073c234.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
转自:http://giaogiaocat.github.io/tool/git-origin/

一直使用GitHub托管代码,但最近觉得下载速度太慢了。所以打算把仓库同步到 https://codeup.aliyun.com/ 上,下载的时候可以提高速度。

## 之前的操作

设定不同的remote,分别推送,感觉很麻烦

“`bash
git remote add origin https://github.com/USERNAME/REPO1.git
git remote add gitee https://gitee.com/USERNAME/REPO2.git

git push origin master
git push gitee master
“`

## 多地址的 remote repo

一般来说最

元記事を表示

GitLabの初心者が読む記事

Gitを知っている人向けにGitLabの説明資料を書いてみました。

# GitLabとは

– GitLab社が公開しているGitによる分散バージョン管理システムのホスティングサービス
– DevOpsのライフサイクル全体をカバーするオールインワンのアプリケーションで、GitLabだけで、DevOpsを実践するために必要なツールを揃えることができる。

#### Gitのホスティングサービス?
– リモートリポジトリを格納するサーバの場所を貸し出すサービス。
– チーム開発時は各メンバーがホスティングサービスのリポジトリをPush&Pullして開発を進める。
– `分散管理`なのでローカルとサーバーの二か所以上にファイルを格納できるため、一つのリポジトリが破損しても、その他のリポジトリから復旧できるので、可用性を確保できる。

#### DevOps?
「開発者と運用者が協力し合い、ユーザーに迅速かつ継続的にプロダクトやサービスの提供を行う」こと、上手く実現することで開発も運用も効率性が向上し、ユーザーにより良いサービスを迅速に提供することができる。

元記事を表示

ローカルで作ったgitのリポジトリを反映させる方法

※前提としてローカルではcommitしているとする。

“`
git push origin master
“`
これだけだとエラーが出る。

“`
fatal: ‘origin’ does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
“`

上のエラーを解消するためには、まずwebで予めリポジトリを作成しておく必要がある。

その後に以下のコマンドを入力する

“`
git remote add origin [リポジトリのURL]
“`
次に以下を入力

“`
git push origin master
“`

ユーザーネームとパスワードの入力を求められるので入力をしたら完了である。

元記事を表示

OTHERカテゴリの最新記事