0

これは私の最初の質問です、それが悪い場合は申し訳ありません。

私は自分のホーム ファイルのいくつかを git を使用してバックアップしています。これには vim プラグインが含まれており、これを git リポジトリとして保持することが多いため、自分のリポジトリにいくつかの git リポジトリがあります。悲しいことに、これらのサブレポは、使用時に追加されていません

 git add . -A

ホームフォルダーのコピーに。

私が見つけたいくつかの解決策:

  • サブモジュールを追加する方法があると聞いたのですが、なぜかリポジトリのルートに置かれてしまうので、毎回追加した後に手動で移動する必要があり、サブモジュールを削除するのも面倒です何かを変えたい。
  • 別の方法として、vim プラグインの .git フォルダーを削除することもできますが、それはプラグインの場所に関する情報を失うことを意味し、変更をプルするのが難しくなります。

これを行う他の方法はありますか?

すべてのサブレポを通常のファイルとして追加できれば問題ありませんが、変更が 2 回追跡されるという欠点があります。

4

2 に答える 2

0

@Greduan と私のコメントを拡張します。

を使用して、ローカル git リポジトリをサブモジュールとして追加できますgit submodule add <repo> <path>

Git SCM のドキュメントによるとsubmodule add:

これには少なくとも 1 つの引数が必要です: <repository>. オプションの引数<path>は、複製されたサブモジュールがスーパープロジェクトに存在するための相対位置です。

TL;DR:<repo><path>が同じ場合、子リポジトリを親リポジトリに複製することを避けることができます


さて、例として(これが実際にどのように機能するかを知りたいと思っていたので、試して結果を投稿しようと思いました):

./に親レポがあり、 に子レポがあるとしましょう./some/folder/child-repo

次の方法で、不必要にクローンを作成せずにサブモジュールを追加できます。

git submodule add ./some/folder/child-repo ./some/folder/child-repo #same location

child-repoこれにより、現在の場所にサブモジュールとして追加されます。

Git は次のようなものを出力します: Adding existing repo at 'some/folder/child-repo' to the index.

を実行するgit statusと、コミットする準備が整った 2 つの新しいファイルが表示されます。

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   .gitmodules
#       new file:   some/folder/child-repo
#

.gitmodulesはモジュールを説明するファイルで、もう 1 つのファイルは子リポジトリ表現です。

サブモジュールを親リポジトリにコミットします。git commit -m 'add child-repo as submodule'

この時点で、子リポジトリで行ったコミットは、次のようにリポジトリに表示されます。

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   some/folder/child-repo (new commits)
#

その後、実行git submodule updateして親リポジトリを更新できます。これで、不要な重複や余分なコミットはありません:)

警告: 親で実行した後に子リポジトリを操作する必要がある場合、子リポジトリが切り離された HEAD状態submodule updateになることがわかります。これは、手動更新セクションに記載されています。git submodule

git checkout master子リポジトリで(または作業しているブランチで)修正できます。

于 2013-09-19T17:23:30.893 に答える
0

サードパーティのプラグインを保持するためにvim-addon-managerまたはVundleに切り替えることをお勧めします。主な考え方は、インストールしたいプラグインの名前を vimrc に入れ、VCS によって追跡されない場所にインストールするように VAM/Vundle を構成することです。次に、バックアップから回復したい場合は、構成にリストしたすべてのプラグインをインストールするように許可する (VAM) か、明示的に要求します (Vundle、私が間違っていなければ)。

ドキュメントの VAM には、 VAM が既にインストールされているかどうかを最初に確認し、インストールされていない場合はインストールしてから、プラグインを続行する機能 (インストールセクションにリストされています) もあります。

このバリアントは、問題を解決する代わりにサブモジュールの必要性を取り除きます。

VAM と同様の目的を持つ他のプラグインとの興味深い比較も見つかるかもしれません。

于 2013-09-19T20:24:53.827 に答える