git再インストール【CentOS】

下記コマンドで、Cannot open で上手くいかれなかったかたはぜひ試してみてください。

# yum -y install https://centos7.iuscommunity.org/ius-release.rpm
Loaded plugins: fastestmirror
Cannot open: https://centos7.iuscommunity.org/ius-release.rpm. Skipping.
Error: Nothing to do

IUSリポジトリを登録

まず、IUSリポジトリを登録します。
IUSのサイトに対処法が書かれておりますので下記コマンドを実施ください。
https://ius.io/setup

# yum install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Gitのインストール

それではGitをインストールします。

# yum install git --enablerepo=ius --disablerepo=base,epel,extras,updates


その際に下記エラーが発生する場合は次の依存性パッケージをバージョンを合わせて行ってみてください

--> Finished Dependency Resolution
Error: Package: git224-2.24.2-1.el7.ius.x86_64 (ius)
           Requires: emacs-filesystem >= 24.3
Error: Package: git224-2.24.2-1.el7.ius.x86_64 (ius)
           Requires: libsecret-1.so.0()(64bit)
Error: Package: git224-2.24.2-1.el7.ius.x86_64 (ius)
           Requires: perl(Term::ReadKey)
Error: Package: git224-perl-Git-2.24.2-1.el7.ius.noarch (ius)
           Requires: perl(Error)
Error: Package: git224-core-2.24.2-1.el7.ius.x86_64 (ius)
           Requires: libpcre2-8.so.0()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

以下のコマンドで依存パッケージも含めてインストールします。

# yum install git224-2.24.2-1.el7.ius.x86_64

途中でkeyのインストールが聞かれるので y を押します。

 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-IUS-7
Importing GPG key 0x4B274DF2:
 Userid     : "IUS (7) <dev@ius.io>"
 Fingerprint: c958 7a09 a11f d706 4f0c a0f4 e558 0725 4b27 4df2
 Package    : ius-release-2-1.el7.ius.noarch (@/ius-release-el7)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-IUS-7

is this ok [y/N]:

インストールが成功しました。バージョンを確認します。

# git version
git version 2.24.2

IUSリポジトリを無効にしたい場合は、以下のコマンドを実行します。

# yum-config-manager --disable ius

お疲れさまでした

2021.08.21 GitHubでhttpsのパスワード認証が廃止されました。Please use a personal access token instead.

作業中にgit pushしたところいままでうまく言っていたのですが下記エラーが発生しました。

$ git push origin main
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access 'https://github.com/名前/リポジトリ.git/': The requested URL returned error: 403

Please use a personal access token instead.
訳: 代わりにパーソナルアクセストークンを使用してください。

事件です。GitHubで2021年8月13日にパスワード認証が廃止されたそうです。
悔しいですね。個人アクセストークンを使うようにしましょう

GitHub 個人アクセストークンを作成する

GitHubにアクセスするとき必要となる、個人アクセストークンを作成していきます。

個人アクセストークンとは、「コマンドラインでのGit操作」や「Gitを使用するアプリケーション」「Gitリポジトリに直接アクセスするアプリケーションやサービス」を利用するときのパスワードの代わりになるものです。GitHubは、2021年8月13日以降、Git操作におけるパスワード認証を廃止し、トークンベースの認証を必須にする方針を発表しています。 これにより、パスワードを用いてのアクセスができなくなってしまいます。したがって、この操作は必ず行っておきましょう。セキュリティの観点から、GitHubは、過去1年間使用されていない個人アクセストークンは自動的に削除します。削除された場合は、再度作成する必要があります。

トークンの作成

1. GitHubのWebページにアクセスし、右上にあるプロフィールの画像をクリックします。

2. メニューからSettingsをクリックします。

3. 左サイドバーからDeveloper settingsをクリックします。

4. 続いて、左サイドバーからPersonal access tokensをクリックします。

5. Generete new tokenをクリックします。

6. 作成するトークンにわかりやすい名前をつけ、このトークンに付与するスコープとして、repogistを選択します。なお、選択したrepo は、このトークンを使用してコマンドラインからリポジトリにアクセスすることができる権限です。では、Generate token をクリックして実際に作成します。

7. 作成されたトークンをメモとして残しておき、忘れないようにしてください。メモを書き間違うことが心配な場合は、スクリーンショットを撮っておくと良いでしょう。

なお、この画面はセキュリティ上の理由で、別ページに移動すると、再度見ることができなくなるので、注意しておいてください。
今回作成したトークンは、ターミナルを使ってコマンドラインからGithubのリポジトリにアクセスする際にパスワードとして使用することになります。

GitHubへリポジトリを反映するための一連の流れ

GitHubへリポジトリを反映させるためには、下記の手順で実行しましょう。

  1. GitHubにリモートリポジトリを作成する
  2. ローカルリポジトリにリモートリポジトリを登録する
  3. ローカルリポジトリのブランチ名を変更する
  4. 登録したリモートリポジトリへプッシュする
  5. GitHubのリモートリポジトリにプッシュされたか確認する

GitHubにリモートリポジトリを作成する

first-gitという名前でGitHubにリモートリポジトリを作成して、公開しましょう。

まずはGitHubへアクセスし、ログインしてください。次に+ボタンから「New repository」をクリックしましょう。

GitHubへリモートリポジトリを作成します。「Repository name」にfirst-gitと入力して、「Create repository」をクリックしてください。

これでリモートリポジトリが作成されましたが、まだ中身は空っぽです。ローカルリポジトリをリモートリポジトリにもコピーして反映させるためにプッシュというコマンドが必要となります。まずはその準備のためにローカルリポジトリにリモートリポジトリを登録していきます。

ローカルリポジトリにリモートリポジトリを登録する

ローカルリポジトリにリモートリポジトリを登録するには、先ほどのキャプチャ内にあった下記のコマンドを実行します。

git remote add origin https://github.com/ユーザ名/first-git.git

このコマンドは、ローカルリポジトリにoriginという名前でリモートリポジトリ(ここではfirst-git.git)を登録するという意味です。ユーザ名には皆さんのGitHubでのユーザ名を入力してください。

これでローカルリポジトリにリモートリポジトリを登録できました。以降、このローカルリポジトリでは、originを使用してリモートリポジトリとやり取りを行うことができます。したがって、git remote add origin ...のコマンドは何度も実行する必要はありません。

リモートリポジトリの登録状況を確認したい場合は下記のコマンドで確認することができます。

git remote -v

ローカルリポジトリのブランチ名を変更する

次に、ローカルリポジトリのブランチ名をmasterからmainに変更します。これは、5.4 ブランチのデフォルトのブランチ名で解説したとおり、リモートリポジトリのデフォルトブランチ名(main)とローカルリポジトリのデフォルトブランチ名(master)が異なっているためです。

git branch -M main

上記コマンドを実行すると、これまで(master)とターミナルに表示されていましたが、(main)に変更されます。

Macの方の注意事項です

macOS キーチェーンからの認証情報を削除する必要があります

git credential-osxkeychain erase

下記は参考サイトです

https://docs.github.com/ja/github/getting-started-with-github/getting-started-with-git/updating-credentials-from-the-macos-keychain

わかりにくければ、下記のほうが簡単に書かれてます

https://zenn.dev/hayata_yamamoto/articles/github-access-key

macでGitコマンドでxcrun: errorが出た時の対処

生徒さんからMacでGit使おうとしたら以下のエラーで動かなかったので、対処方法をメモしておきます。

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

環境

  • macOS Catalina10.15.3
  • git version 2.21.1 (Apple Git-122.3)

対処方法

Xcodeの開発者ツールが見当たらなくなってしまっていることが原因らしいので、ターミナルで以下を実行すると直りました。

xcode-select --install
xcode-select --reset

初めての対処でした。忘れないようにです

ブランチ切って更新してマージするまでの流れ

faceless ethnic farmer picking grapes from green vine
Photo by Zen Chung on Pexels.com

前提

  • masterブランチを本番環境で適用する想定
  • developブランチをstg環境で適用する想定

今回は、developブランチに機能を追加するため、feature/sudaというブランチを作成し、後でdevelopブランチにマージすることを考える。

1.developブランチからfeature/sudaを作成

1-1.developブランチへ移動

git checkout develop

1-2.feature/sudaを作成し、移動する

git checkout -b feature/suda
  • -bオプションをつけると、移動とセットでブランチの作成も出来る
  • 現在のブランチはgit branchで確認可能

(おまけ)ブランチの削除

もしブランチ名を間違えてfeature/sudaxxxとしてしまったら、消して作りなおそう!

まず、消したいブランチとは異なるブランチに移動し、ブランチを消す。

git checkout develop
git checkout -d feature/sudaxxx

2.feature/sudaブランチで作業

実装後、

git add .
git commit -am "commit message!"
git push origin feature/suda

などとして、remoteに反映。

3.developへのマージ作業

3-1.マージ先のブランチに移動

git checkout develop

3-2.マージ

git merge --no-ff feature/suda
  • --no-ffオプション:fast-forwardの関係であっても、必ずマージコミットを作る
  • 機能追加が見やすいので、僕らのプロジェクトではこの--no-ffオプションを使っている
  • mergeする時、ローカルのdevelopブランチを最新の状態にするのを忘れずに!(以前筆者は躓いた)

▼(参考)図で分かるgit-mergeの–ff, –no-ff, –squashの違い
http://d.hatena.ne.jp/sinsoku/20111025/1319497900

おまけ1

おすすめのgit運用方法

普段gitのブランチをなるべく枝分かれさせないようにし、機能追加の単位でブランチを切るのが個人的なおすすめ。

他の人とpushが交互になる場合、

git fetch origin
git rebase origin/master

とすれば、ブランチが分かれず1本につながる。

▼(参考)git rebase 失敗した時の対処法
http://qiita.com/shuntaro_tamura/items/c505b76c1021a35ca9ff

機能追加の時は、上記のようにfeature/xxxブランチを切って

git merge --no-ff feature/xxx

によりマージするのがおすすめです。

具体例)

developへのマージ

git checkout develop
git merge --no-ff feature/xxx

masterへのプルリク

ブラウザのgithubからプルリク(プルリク後マージされる)
mvn clean deploy

Git ブランチを作成してみた

ブランチ作成

git branch fauture/suda

ブランチ一覧確認

git branch
ーーーーーーー
fauture/suda
master

ブランチ切り替え

PS D:\docker-reds\git-ec-reds> git checkout fauture/suda
Switched to branch 'fauture/suda'
M user/cake/app/Config/database.php
M user/public_html/.htaccess
PS D:\docker-reds\git-ec-reds> git branch
fauture/suda 
master

下記が参考サイトです

https://backlog.com/ja/git-tutorial/reference/branch/

Gitで git/index.lock 発生!

fatal: Unable to create 'C:/pleiades/workspace/daily_report_system/.git/index.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

あとから本人が

【何をしたか】
GitBashに git commit .
と入力しました。

あとで言うなよなー!

git add .

でもエラーでてたのに無視です。

日本人ってまったく簡単な英語を読もうとしないのはWhy??

それも大学生。。

原因は

fatal: Unable to create '.git/index.lock': File exists.

なんかよく分からないが怒られた。

.git/index.lockとは

エラーの文言的には,index.lockってファイルが存在しているからエラーになってるっぽい。

なんや,index.lockって。。

git/index.lockとは
同じgitのリポジトリ内で同時に複数の処理を行わないための排他制御を行うもの。
つまり,index.lockが存在するということは,裏で他のgit操作が行われている。

ならば,他のgit操作が終了するのを待てばいい。
もちろん,時間をおけばgit操作できるようになるのだが,「そんなの待ちきれないよ」って方は別の解決法で。

git/index.lockを削除

index.lock削除してしまっても構わない。

$ rm .git/index.lock

ワーキングディレクトリ内にて,このコマンド一発で解決です。

みんな、正しい情報伝えてから質問しようぜ!

けど

Github に追加できました。
ありがとうございます!

この一言で喜びに変わっちゃいました。。

Non-Fast-Forward Push の解決【Git競合】

他の開発者とともに同じリモートリポジトリ (depot リポジトリ) を利用していれば、しばしば発生するのが Non-Fast-Forward Push 問題です。

原因は、直接サーバを修正したようです。

non-fast-forward は、下のような状況で言うとmasterブランチのリモートとローカルの最新情報が異なっていることを示す。そのため、通常のプッシュが行えず、rejectが表示される。

master    a --- b --- c --- d --- e
(リモート)
          
master    a --- b --- c --- d --- f
(ローカル)     

これで、この会社は2度目です。むかーーー!

対処法

サーバ側を正にして、変更点を手修正です。泣きそうな作業です

手動マージ作業は以外では、パソコン側でマージツール起動して解決したいのですが、pushすらできません。( ノД`)シクシク…。

(1)git pull origin master  
   リモートの情報をローカルに持ってくる(自動的にマージも行われる)
(2)git diff remotes/origin/master
   現在のローカルブランチとリモートブランチの差分を表示。
   マージされた分を手修正
(3) git push origin master -f  
   最新情報が一致するため強制のプッシュを行う

.gitignoreで後で対象外とした場合の手順

gitignoreにファイルを指定することで、gitHubにアップしたくないファイルを対象外とすることができます。しかしあとから追加する場合は、すでにローカルリポジトリのキャッシュにインデックスには存在してますので削除が必要です。

いつも手順忘れで困ってますので記載します。

手順

  1. .gitignore 編集
  2. キャッシュを削除
  3. commit と push

キャッシュ削除の際、ファイルを削除しているわけではないのでご安心ください。また、pushした際に大量のremoveログが出るが、ローカルのファイルが消えたわけではないです。

キャッシュ削除の方法

下記コマンドを実行する。
ファイル全体キャッシュ削除が確実だが、怖い人はファイル指定をしてください。

$ git rm -r --cached . //ファイル全体キャッシュ削除
$ git rm -r --cached [ファイル名]  //ファイル指定してキャッシュ削除

ご参考まで!

Git Windowsでの改行コード問題対応コマンド

Windows環境でコミット時間にCRLFに自動変換されてしまうことがあります。

これはgitコマンドconfig –global core.autocrlf実行することで解決できます。

git config --global core.autocrlf input

このコマンドよりCRLF変換を防ぎコミット時にLF変換されるようになります