既存のリポジトリに外部ディレクトリを追加したい。
外部ディレクトリ:/ home/some/directory
作業ディレクトリ:/htdocs/.git
/ htdocsディレクトリから次のコマンドを試行した場合:
git add/home/some/directory
エラーが発生します:致命的: '/ home/some/directory'はリポジトリ外です
そのようなことをする必要がある場合は、通常、その外部ファイルまたはディレクトリをgitリポジトリに移動し、元の場所を新しい場所にシンボリックリンクします。
mv /home/some/directory /htdocs/directory
ln -s /htdocs/directory /home/some/
git add ./directory
バージョン管理を維持したいが特定の場所に保存する必要があるアプリケーション用のプラグインを開発しているときに、この手法を使用します。
私は同じエラーがありました...グーグルで死にました...あまり出ていませんでした。
クリスチャンの答えは働いた:
git --work-tree=/ add /home/some/directory
しかし、その後、「作業ツリー」が私を動かしました。すべてのGitドキュメントをgrepし、core.worktree
。
使った
git config --global core.worktree /
そして出来上がり!システムのanyディレクトリから追加できるようになりました。それが他の場所で問題を引き起こすかどうかはわかりませんが、私が進むにつれて更新しようとします。
git --work-tree=/ add /home/some/directory
これには本当に簡単な解決策があります。
Git-repoが/ var/data/my-appにあり、そのリポジトリに/ var/data/public /を追加するとします。 Gitはリポジトリのルートディレクトリ外にリソースを追加しないため、「add」は使用できません。そう..
解決:
/ var/data/public /ディレクトリをGit-repoルート(/ var/data/my-app)に移動します。
ln -s source_file_or_directory virtual_file_or_directory
を使用して、/ var/data/public内に/ var/data/my-app/publicフォルダーへのシンボリックリンク(シンボリックリンク)を作成します。
次に、通常の方法でgit add
を使用して、移動したファイルまたはディレクトリをGitに追加します。これで、Gitソース管理が目的のファイル/フォルダーを追跡し、外部ディレクトリのシンボリックリンクにより、ファイル/フォルダーが他のどのファイルからもアクセスできるようになりました!
レポジトリに追加するコードが大きすぎない場合は、プッシュする前に毎回自動的にレポジトリにコピーすることもできます。
私の場合、たとえば、いくつかのリポジトリで1つのRファイルを必要とします。
#!/usr/bin/env bash
cp -r /some/directory/file.R .
git add .
git commit -m "add"
git Push
...そして/ some/directoryの変更を含むすべての変更をプッシュするために、このスクリプトを実行します。
これは、シンボリックリンクされたファイル/ディレクトリを使用するソリューションを非常に望んでいますが、Windowsコンピュータに固執しているので、私に考えさせられました。私の知る限り、Windowsのシンボリックリンクは実際には同じようには機能しません。したがって、別の解決策は、問題のファイルを「インポート」および「エクスポート」する2つのスクリプト/ bash関数を作成することです。
import() {
cp -fr /home/some/directory /htdocs/
}
export() {
cp -fr /htdocs/directory /home/some/
}
次に、リポジトリにファイルのコピーを作成し、git add
。
または、異なるgitリポジトリで作業する場合はサブモジュールを使用できます(lnはこの方法では機能しません)。 「man git-submodule」を試してください。