3

git サブツリーを使用して、複数のプロジェクトで共通のライブラリ ファイルを共有しようとしています。これが私が遭遇し続ける問題です。

1) サブツリーを追加して、プロジェクトの「lib」サブディレクトリが lib-dk リポジトリから来るようにします。

$ git subtree add --prefix=lib --squash git@bitbucket.org:dwknight/lib-dk.git master

2) 「lib」内のファイルに変更を加える

3) メイン プロジェクト リポジトリに変更をコミットする

$ git commit -am "update project"

4) アップデートをメイン プロジェクト リポジトリにプッシュする

$ git push origin master

5) 「lib」の変更を「lib-dk」リポジトリにプッシュします。

$ git subtree push --prefix=lib git@bitbucket.org:dwknight/lib-dk.git master
git push using:  git@bitbucket.org:dwknight/lib-dk.git master
To git@bitbucket.org:dwknight/lib-dk.git
 ! [rejected]        f455c24a79447c6e3fe1690f5709357b7f96828a -> master (non-fast-forward)
error: failed to push some refs to 'git@bitbucket.org:dwknight/lib-dk.git'
hint: Updates were rejected because the tip of your current branch is behind its remote counterpart. Merge the remote changes (e.g. 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

6) lib-dk リポジトリで何も変更されていない場合でも、この拒否が発生します。プルしようとすると、何かのように動作しますが、プル経由で更新できます。それでもプッシュは拒否され続けます。

4

3 に答える 3

2

--squashオプションなしでこれを試してみるとgit subtree add、うまくいきます。--squashコメンターが示唆したように、役に立たない方法で歴史をいじっていると思います。

于 2013-04-19T19:09:06.363 に答える
0

ではなく、git add -A .次に使用する必要があるかもしれませんgit commitgit commit -am <message>

-Agit-add行うので:

   -A, --all, --no-ignore-removal
       Update the index not only where the working tree has a file matching <pathspec> but also where the
       index already has an entry. This adds, modifies, and removes index entries to match the working
       tree.

       If no <pathspec> is given when -A option is used, all files in the entire working tree are updated
       (old versions of Git used to limit the update to the current directory and its subdirectories).

一方、-aingit-commitはそうします (man ページにはあまり詳細が記載されていません):

   -a, --all
       Tell the command to automatically stage files that have been modified and deleted, but new files
       you have not told Git about are not affected.

これは役立つかもしれません。著者はgit add -A .明示的に呼び出しました。

于 2016-12-28T07:13:10.303 に答える