git: How do you add an external directory to the repository?

强颜欢笑 提交于 2019-11-27 17:58:20

If I need to do something like that I would normally move that external file or directory into my git repo and symlink it's original location to the new one.

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

I use this technique when I am developing a plug-in for an application that I want to keep under version control but have to store in a specific location.

MotherDawg

I had the same error... Googled it to death... not much came out.

Christian's answer worked :

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

But then "work-tree" got me going. I grep'd all Git docs and came up with core.worktree.

I used

git config --global core.worktree /

And voila! I can now add from any directory in the system. I don't know if it will cause problems any other places, but I'll try to update as I go along.

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

There's a really simple solution to this.

Let say you're Git-repo is in /var/data/my-app and you want to add /var/data/public/ to that repo. You can't use 'add' because Git won't add resources outside of the repo's root directory. So..

Solution:

  1. Move the /var/data/public/ directory into your Git-repo root (/var/data/my-app).

  2. Create a sym-link (symbolic link) inside of /var/data/public to the /var/data/my-app/public folder, using: ln -s source_file_or_directory virtual_file_or_directory

Then, just add the moved file or directory to Git using git add in the normal fashion. Your Git source control is now tracking the desired file/folder, and your sym-link in the external directory assures that the file/folder is accessible to whatever else!

If the code that you want to add to your repo is not too big, you could also automatically copy it to your repo each time before you push.

In my case I for example need one R file, which I modify quite often, in several repos and I wrote a little shell script:

#!/usr/bin/env bash

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

...and I run this script in order to push all changes, including the ones in /some/directory.

Or you can use submodule if you want to work across different git repos (ln doesn't work in this way). Try 'man git-submodule'.

This got me thinking, since I would like very much the solution of using a symlinked file/dir but am stuck on a windows computer. As far as I know the symlinks in windows doesnt really work in the same way. So another solution could be to write two scripts/bash functions to "import" and "export" the file(s) in question, such as:

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

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

Then you would have a copy of the file in your repository, which you could git add.

Add a symbolic link to the directory within the repository. Then, add the same.

ln -s /home/some/directory/
git add directory
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!