web-dev-qa-db-ja.com

git:リポジトリに外部ディレクトリを追加するにはどうしますか?

既存のリポジトリに外部ディレクトリを追加したい。

外部ディレクトリ:/ home/some/directory

作業ディレクトリ:/htdocs/.git

/ htdocsディレクトリから次のコマンドを試行した場合:

git add/home/some/directory

エラーが発生します:致命的: '/ home/some/directory'はリポジトリ外です

46
Sly

そのようなことをする必要がある場合は、通常、その外部ファイルまたはディレクトリをgitリポジトリに移動し、元の場所を新しい場所にシンボリックリンクします。

mv /home/some/directory /htdocs/directory
ln -s /htdocs/directory /home/some/
git add ./directory

バージョン管理を維持したいが特定の場所に保存する必要があるアプリケーション用のプラグインを開発しているときに、この手法を使用します。

51
csexton

私は同じエラーがありました...グーグルで死にました...あまり出ていませんでした。

クリスチャンの答えは働いた:

git --work-tree=/ add /home/some/directory

しかし、その後、「作業ツリー」が私を動かしました。すべてのGitドキュメントをgrepし、core.worktree

使った

git config --global core.worktree /

そして出来上がり!システムのanyディレクトリから追加できるようになりました。それが他の場所で問題を引き起こすかどうかはわかりませんが、私が進むにつれて更新しようとします。

15
MotherDawg
git --work-tree=/ add /home/some/directory
13
anon

これには本当に簡単な解決策があります。

Git-repoが/ var/data/my-appにあり、そのリポジトリに/ var/data/public /を追加するとします。 Gitはリポジトリのルートディレクトリ外にリソースを追加しないため、「add」は使用できません。そう..

解決:

  1. / var/data/public /ディレクトリをGit-repoルート(/ var/data/my-app)に移動します。

  2. ln -s source_file_or_directory virtual_file_or_directoryを使用して、/ var/data/public内に/ var/data/my-app/publicフォルダーへのシンボリックリンク(シンボリックリンク)を作成します。

次に、通常の方法でgit addを使用して、移動したファイルまたはディレクトリをGitに追加します。これで、Gitソース管理が目的のファイル/フォルダーを追跡し、外部ディレクトリのシンボリックリンクにより、ファイル/フォルダーが他のどのファイルからもアクセスできるようになりました!

8
Stormbytes

レポジトリに追加するコードが大きすぎない場合は、プッシュする前に毎回自動的にレポジトリにコピーすることもできます。

私の場合、たとえば、いくつかのリポジトリで1つのRファイルを必要とします。

#!/usr/bin/env bash

cp -r /some/directory/file.R .
git add .
git commit -m "add"
git Push

...そして/ some/directoryの変更を含むすべての変更をプッシュするために、このスクリプトを実行します。

1

これは、シンボリックリンクされたファイル/ディレクトリを使用するソリューションを非常に望んでいますが、Windowsコンピュータに固執しているので、私に考えさせられました。私の知る限り、Windowsのシンボリックリンクは実際には同じようには機能しません。したがって、別の解決策は、問題のファイルを「インポート」および「エクスポート」する2つのスクリプト/ bash関数を作成することです。

import() {
    cp -fr /home/some/directory /htdocs/
}

export() {
    cp -fr /htdocs/directory /home/some/
}

次に、リポジトリにファイルのコピーを作成し、git add

0
Tubbles

または、異なるgitリポジトリで作業する場合はサブモジュールを使用できます(lnはこの方法では機能しません)。 「man git-submodule」を試してください。

0
superarts.org