递归地将整个文件夹添加到存储库


250

我正在尝试向GitHub上的master分支添加一个分支,并将文件夹推送到该分支。

分支的文件夹结构类似于-SocialApp / SourceCode / DevTrunk / SocialApp,所有源代码文件位于最后一个文件夹中。

我正在使用以下Git命令:

git add *
git commit -m with the message
git push

这仅将第一个文件夹“ SocialApp”推送到GitHub上,而忽略了该文件夹内的文件夹SourceCode。我该如何解决?


4
哪里有文件?他们不被忽略.gitignore吗?
CharlesB

This is pushing only the first folder-git根本不关心文件夹,只关心文件。请显示提交-您已经提交了子模块,符号链接或不是文件夹的其他文件
AD7six 2013年

我遇到了同样的问题。我认为这不是问题,而只是预期的行为。令人惊讶的是,有这么多解决方案。

注意:如果文件夹为空,则不会对其进行跟踪。将空的.keep文件放在其中以保留空目录是一个很好的做法
Dude

Answers:


356

检查.gitignore文件,如果子目录被忽略。

然后再试一次

git add --all
git commit -am "<commit message>"
git push

4
请注意,这将不包括.gitignore中提到的文件。我通常用手工添加那些或使用这样的批处理文件:for /R %%f in (*.*) do git add --force %%f(见bitbucket.org/jeroenp/besharp.net/src/tip/Scr​​ipts/GIT/...
吉荣Wiert Pluimers

9
要递归添加文件夹的整个树结构,命令应为git add --all :/
Jason Hartley 2014年

7
@JeroenWiertPluimers git add -f -all致力于添加.gitignored文件
Orwellophile

3
@JasonHartley您的评论可能是一个答案。谢谢!
ShutUpMagda

4
这不是在git repo中添加所有未暂存的文件,而不仅仅是当前文件夹吗?我不认为这是最初的问题。
泰德

31

这为我工作:

git add . --force

1
其他答案要求将文件列表作为命令的参数来计算,而答案不是,因此是更好的选择。
topkara

3
绝对是最好的答案。.一个编辑将提到,--force如果您希望忽略仍然被忽略,则不需要。
GrafikRobot

31

SETUP-本地服务器上的本地存储库-客户端通过LAN连接到本地服务器

git add foldername/\\*

使其进入服务器...

git commit -m "comments..."
git push remote_server_name master

通常,用户将分配remote_server_name作为来源...

git remote add remote_server_name username@git_server_ip:/path/to/git_repo

9
失败为fatal: pathspec 'foldername/\\*' did not match any files。曾担任git add foldername/\*
Tpojka

git add foldername/\\*和之间有什么区别git add --all
丹尼尔(Danijel)

17

从顶层目录调用的“ git add *”和“ git add SocialApp”都应递归添加所有目录。

可能您在SocialApp / SourceCode / DevTrunk / SocialApp中没有文件,这就是原因。

尝试调用“ touch SocialApp / SourceCode / DevTrunk / SocialApp / .temporary”(并检查.gitignore),然后再次尝试git add。


2
我不这么认为,我使用git add *并遇到相同的问题。

16

在我的情况下,子目录中有一个.git文件夹,因为我之前已经在那里初始化了一个git repo。当我添加子目录时,它只是将其作为子项目添加,而没有添加任何包含的文件。

我通过从子目录中删除git存储库,然后重新添加文件夹来解决了该问题。


这为我解决了。我还必须重命名文件夹本身才能进行修复
Totem


5

我遇到了这个问题,这花了我一些时间,然后想起git不会存储空文件夹。请记住,如果您有要存储的文件夹树,请至少在该树的最深文件夹中放置一个文件,类似于名为“ .gitkeep”的文件,以通过git影响存储。


5

如果要递归添加目录及其中的所有文件,请转到要添加目录所在的目录。

$ cd directory
$ git add directoryname

1
cd目录git add *
弗朗索瓦·理查德


1

有时我想将我的Web服务源代码及其客户端项目包括在内。他们两个都有一个单独的git仓库。我实际上习惯于使用命令添加所有文件:

git add -A

但是由于某种原因,它只会添加文件夹。后来我发现服务器文件中也有其.git文件夹,因此该命令不起作用。

tl; dr:确保要暂存的.git文件夹内没有文件夹。


1
如果不想删除.git文件夹,如何解决?
轧辊

@rolls查看git子模块
mr5'1

1

导航到您拥有文件的文件夹(
如果您在Windows计算机上),则需要启动git bash,从中将获得命令行界面,然后使用这些命令

git init   //this initializes a .git  repository in your working directory

git remote add origin <URL_TO_YOUR_REPO.git> // this points to correct repository where files will be uploaded

git add *   // this adds all the files to the initialialized git repository

如果在将文件合并到主文件之前对文件进行了任何更改,则必须通过执行以下操作来提交更改:

git commit -m "applied some changes to the branch"

签出后,分支转到主分支


仅提及的答案init
Atul

1

方案/解决方案1:请
确保您的Folder/ Sub-folder不在.gitignore文件中。


方案/解决方案2:
默认情况下,以git add .递归方式工作。


方案/解决方案3:
git add --all :/正常工作,在git add .不工作的地方工作。
(@JasonHartley的评论)


方案/解决方案4:
我个人遇到的问题是添加的Subfolders or Files,这在多个之间是很常见的Folders

例如:
Folder/Subfolder-L1/Subfolder-L2/...file12.txt
Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt
Folder/Subfolder-L1/...file1.txt

因此Git,建议我添加git submodule,虽然尝试过但很痛苦。


最后对我有用的是:

1. git add一个文件位于a的末尾/级别Folder
例如:
git add Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt

2. git add --all :/现在。
它会非常迅速地添加所有的FoldersSubfoldersfiles



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.