0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

`git push` の 141 エラーを解決するためにログを分割してプッシュした

Posted at

3行まとめ

  • git push で 141 エラーが出るのは、リモート側(GitHub など)のタイムアウトが原因
  • タイムアウトが発生するのは一度にプッシュする量が多すぎるから
  • 一度にプッシュする量を少なくするためにログを分割してプッシュした
    • この記事は「1コミットが大きすぎる」や「1ファイルが大きすぎる」への対応ではないです

状況

1年間開発を続けていた git リポジトリがある。git-lfs を利用している。
とある事情でリモートリポジトリを引っ越ししたい。

GitHub で新規のリモートリポジトリを作成して、最新のメインブランチをプッシュしたところ git push がタイムアウトし、エラーコード141 が発生した。

解決した方法を記載します。

原因: タイムアウトによるエラー

この問題は一度に転送するデータ量(特に大きな LFS オブジェクト)が多すぎる際に起こりやすいようです。

今回は、大きなリポジトリを新しい場所へ引っ越しでログがたくさんあるメインブランチをプッシュしようとしたため発生したようです。

解決策: 小分けにしてプッシュする

この問題を解決するためにメインブランチでのプッシュではなく、メインブランチのログにあるコミットを月ごとの小分けにしてプッシュする方法で対応し、解決しました。

具体的な手順

以下の手順でこの作業を進めました。

  1. メインブランチのログからマージコミットを探し、ハッシュ値・日付を控える
  2. 指定のハッシュ値でブランチを作成する
  3. ブランチをプッシュする
  4. 2〜3を繰り返す
  5. メインブランチをプッシュする
  6. 不要なブランチを削除する

参考スクリプト1: push.sh

指定のコミットハッシュをプッシュするスクリプト

#!/bin/bash -xe

SCRIPT_DIR=$(cd $(dirname $0); pwd)
cd $SCRIPT_DIR

# 引数1: コミットハッシュ
# 引数2: 日付
COMMIT_HASH=$1
DATE=$2
if [ -z "$COMMIT_HASH" ]; then
  echo "Usage: $0 <commit-hash> <date>"
  exit 1
fi

if [ -z "$DATE" ]; then
  echo "Usage: $0 <commit-hash> <date>"
  exit 1
fi

BRANCH_NAME="feature/update_$DATE"

git checkout -b $BRANCH_NAME $COMMIT_HASH
git push

参考スクリプト2: push-exec.sh

控えたハッシュ値、日付で連続実行するスクリプト

#!/bin/bash -xe

SCRIPT_DIR=$(cd $(dirname $0); pwd)
cd $SCRIPT_DIR

./push.sh abcd1234 2025-01-30
./push.sh abcd1234 2025-02-20
./push.sh abcd1234 2025-03-30
./push.sh abcd1234 2025-04-30
./push.sh abcd1234 2025-05-30
./push.sh abcd1234 2025-06-30
./push.sh abcd1234 2025-07-30
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?