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

Posted

技术标签:

【中文标题】递归地将整个文件夹添加到存储库【英文标题】:Recursively add the entire folder to a repository 【发布时间】:2013-07-18 14:08:28 【问题描述】:

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

分支的文件夹结构看起来像 - SocialApp/SourceCode/DevTrunk/SocialApp 和所有源代码文件都在最后一个文件夹中。

我正在使用以下 Git 命令:

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

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

【问题讨论】:

哪里有文件? .gitignore 中没有忽略它们吗? This is pushing only the first folder - git 根本不关心文件夹,只关心文件。请显示提交 - 您提交了一个子模块、一个符号链接或其他不是文件夹的东西 我也遇到了同样的问题。我不认为这是一个问题,而只是预期的行为。令人惊讶的是有这么多解决方案。 注意:当您的文件夹为空时,它们不会被跟踪。将一个空的 .keep 文件放在那里以保留空目录是一个好习惯 【参考方案1】:

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

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

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

【讨论】:

我不这么认为,我使用 git add * 并且遇到了同样的问题。【参考方案2】:

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

然后再试一次

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

【讨论】:

请注意,这将不包括 .gitignore 中提到的文件。我通常手动添加它们或使用这样的批处理文件:for /R %%f in (*.*) do git add --force %%f(参见bitbucket.org/jeroenp/besharp.net/src/tip/Scripts/GIT/…) 递归添加文件夹的整个树形结构,命令应该是git add --all :/ @JeroenWiertPluimers git add -f -all 用于添加 .gitignored 文件 @JasonHartley 您的评论可能是一个答案。谢谢! 这不是在 git repo 中添加所有未暂存的文件,而不仅仅是当前文件夹吗?我不认为这是最初的问题所要问的。【参考方案3】:

设置

本地服务器上的本地存储库 客户端通过局域网连接到本地服务器

更新(2020 年 9 月): 使用 foldername/\* 而不是 foldername/\\*

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

【讨论】:

失败为fatal: pathspec 'foldername/\\*' did not match any files。曾担任git add foldername/\* git add foldername/\\*git add --all有什么区别? Danijel,前者将所有文件添加到一个文件夹中,而后者将所有文件添加到存储库中 git add -f foldername/\* - 为我工作。已添加-f【参考方案4】:

这对我有用:

git add . --force

【讨论】:

其他答案要求将文件列表计算为命令的参数,而这个没有,因此是更好的选择。 绝对是最好的答案。如果您希望忽略仍然受到尊重,一个编辑会提到您不需要--force【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

这为我解决了。我还必须重命名文件夹本身才能进行修复。【参考方案7】:

如果你想递归地添加一个目录和其中的所有文件,转到你要添加的目录所在的目录。

$ cd directory
$ git add directoryname

【讨论】:

cd 目录 git add *【参考方案8】:

导航到您保存文件的文件夹如果您在 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【参考方案9】:

有时我想将我的 Web 服务源代码连同其客户端项目一起包含在内。它们都有一个单独的 git 存储库。 我其实习惯用命令添加所有文件:

git add -A

但由于某种原因,它只添加了文件夹。后来我发现服务器文件也有它的.git文件夹,所以这个命令不起作用。

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

【讨论】:

如果您不想删除 .git 文件夹,如何解决这个问题? @rolls 见git submodules【参考方案10】:

我只是用这个:

git add app/src/release/*

您只需指定要添加的文件夹,然后使用* 递归地添加里面的所有内容。

【讨论】:

这可能会失败。见***.com/questions/12084227/… @kmiklas 很有趣。应该是git add app/src/release/. git add --all app/src/release/ 为我工作;参考:git-scm.com/docs/git-add @kmiklas 我喜欢这种方法。下次我会使用它。使用git add app/src/release/* 对我有用,但如果它会失败,为什么要冒险?下次我会更好地使用git add --all app/src/release/。谢谢!【参考方案11】:

我也有同样的问题,我没有 .gitignore 文件。我的问题通过以下方式解决。这会占用所有子目录和文件。

git add <directory>/*

【讨论】:

【参考方案12】:

这对我有用

git add -f *

【讨论】:

【参考方案13】:

场景/解决方案 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 一个位于Folder 的最后一个/级别的文件。 例如: git add Folder/Subfolder-L1/Subfolder-L2/Subfolder-L3/...file123.txt 2.git add --all :/ 现在。 它会非常迅速地添加所有FoldersSubfoldersfiles


【讨论】:

【参考方案14】:

我只需要这样做,我发现您可以轻松地将文件添加到子目录中。您只需要位于 repo 的“***目录”,然后运行类似:

$ git add ./subdir/file_in_subdir.txt

【讨论】:

【参考方案15】:

git add --all my/awesome/stuff/ 为我工作。 [1]

    https://git-scm.com/docs/git-add

【讨论】:

以上是关于递归地将整个文件夹添加到存储库的主要内容,如果未能解决你的问题,请参考以下文章

递归地将数据从 redshift 卸载到 S3 存储桶

如何递归地将目录复制到另一个目录并仅替换未更改的文件?

如果文件不匹配,则递归地将一个目录复制到另一个目录

GitHub API:无法可靠地将文件添加到存储库

git中忽略所有文件后,白名单中添加文件夹及其所有子文件(夹)

git中忽略所有文件后,白名单中添加文件夹及其所有子文件(夹)