我的目录A中有与目录b匹配的文件,目录A中可能有其他需要的文件。目录B是一个git repo。

我想克隆目录B到目录A,但是git-clone不允许我这样做,因为目录是非空的。

我希望它只是克隆。git,因为所有的文件匹配我可以从那里去?

我不能克隆到一个空目录,因为我在目录A中有不在目录B中的文件,我想保留它们。

复制.git不是一个选项,因为我想用引用来推/拉,我不想手动设置它们。

有什么办法可以做到吗?

更新:我认为这是有效的,有人能看到任何问题吗?-->

cd a
git clone --no-hardlinks --no-checkout ../b a.tmp 
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this

当前回答

这招对我很管用:

cd existing_folder
git init
git remote add origin path_to_your_repo.git
git add .
git commit
git push -u origin master

其他回答

我在一个新的Apache web目录(用WHM创建的帐户)中遇到了类似的问题,我计划将其用作登台web服务器。我最初需要用那里的代码库克隆我的新项目,并通过从存储库中提取来定期部署更改。

问题是该帐户已经包含了web服务器文件,如:

.bash_history
.bash_logout
.bash_profile
.bashrc
.contactemail
.cpanel/
...

...我既不想删除也不想提交到我的存储库。我需要他们待在那里不被发现。

我做了什么:

我去到我的web文件夹(existing_folder):

cd /home/existing_folder

然后:

git init
git remote add origin PATH/TO/REPO
git pull origin master
git status

它显示(正如预期的那样)许多未暂存文件的列表-那些最初已经存在于我的cPanel web帐户。

然后,多亏了这篇文章,我把这些文件的列表添加到:

**.git/info/exclude**

该文件几乎类似于.gitignore文件,允许您忽略正在暂存的文件。在此之后,我在.git/目录中没有任何东西要提交-它就像一个个人的.gitignore,其他人无法看到。

现在检查git状态返回:

On branch master
nothing to commit, working tree clean

现在我可以通过简单地从git存储库中提取更改来部署到这个web服务器。希望这能帮助一些web开发人员轻松地创建登台服务器。

下面的方法对我很有效。首先,我要确保a目录中的文件是源代码控制的:

$ cd a
$ git init
$ git add .
$ git commit -m "..."

Then

$ git remote add origin https://URL/TO/REPO
$ git pull origin master --allow-unrelated-histories
$ git push origin master

另一个简单的方法似乎对我很管用:

git clone --bare $URL .git
git config --unset core.bare

我签出现有文件到目录的主要用例是用Git控制我的Unix dotfiles。在一个新帐户中,主目录中已经有一些文件,甚至可能是我想从Git中获取的文件。

也许我误解了你的问题,但是如果你把文件从A复制/移动到git repo B,然后用git add添加所需的文件,不是更简单吗?

更新:从git文档:

仅当现有目录为空时才允许克隆到该目录。

来源:http://git-scm.com/docs/git-clone

以下是我正在做的:

git clone repo /tmp/folder
cp -rf /tmp/folder/.git /dest/folder/
cd /dest/folder
git checkout -f master