Add existing project to Github without initializing .gitignore
我通常使用以下文档将现有项目添加到Github。https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
文件还说……为了避免错误,不要用自述文件、许可证或gitignore文件初始化新的存储库。您可以在项目被推送到GitHub之后添加这些文件。
所以现在,当我第一次推送更改时,所有不必要的JAR文件/target directory/ide文件都会被推送。然后我手动排除这些文件,添加.gitignore,如下..
1 2 3 4 5
| $ echo '.idea' >> .gitignore
$ git rm -r --cached .idea
$ git add .gitignore
$ git commit -m '(some message stating you added .idea to ignored entries)'
$ git push |
我可以防止第一次添加所有这些不需要的文件吗?
删除不需要的文件(target、jar、ide文件)并将它们添加到.gitignore之后,我已经验证了它们不再存在于github中,但是当我克隆URL时,它仍然是100MB,实际下载大小却小于1MB?有人能解释一下吗?
- 我建议您至少阅读介绍性的git文本的前几章(例如git网站上的优秀章节)。你的问题是你盲目地遵循链接中的步骤(特别是git add .),而没有意识到你可能对添加的内容有选择性。
- jbentley说的是真的,我一般不推荐git add .,但在我看来,它回答不了正确的问题。在最初的Github推送中包含一个.gitignore文件没有什么问题。重要的是,在创建存储库时,不要让Github创建.gitignore。详情见下文。
- @jbentley-dint真的是盲目地遵循这些步骤,我已经使用Git一段时间了。我知道git add .可以做什么,但是我的项目中有很多不同类型的文件,我不想通过命令行逐个手动添加它们(我更喜欢命令行)。其他人建议可以在本地添加.gitignore,并在推送过程中使用它,这是我喜欢的。
首先不添加.gitignore文件的一个原因是确保跟踪所有文件。这样你就不会不小心漏掉一个重要的目录。如果您知道自己在做什么,请在提交之前添加相应的.gitignore模板。
.idea目录仍然存在于git历史中。关于从GitHub上的存储库中删除敏感数据,有大量文档。
- "首先不添加.gitignore文件的唯一原因是确保跟踪所有文件。"我强烈反对这一点。有些文件未被跟踪没有任何问题,也没有理由确保它们是。此建议适用于在GitHub上创建存储库的过程。如果您使用"初始化带自述文件的项目"选项,并且您也有一个现有的本地repo,那么稍后您将不得不强制推送或以其他方式处理两个冲突的历史记录。但是,在本地使用.gitignore并推动它是完全正确的。
- @克里斯,我就是这么说的。
- 不是真的。说"首先不添加.gitignore文件的唯一原因是确保跟踪所有文件",忽略了避免不必要的合并冲突的更重要的原因。
- @Chris如果不添加.gitignore文件,您将如何避免合并冲突?
- 在注释中解释足够详细的内容是困难的,但关键是文件的创建位置。不要使用新建存储库向导直接在Github中创建它,而是可以在本地创建它。我添加了我自己的答案。希望这能说明问题。
- 这是非常特定于Github的问题,没有反映出来。我相应地更新了它。
- 让我们在聊天中继续讨论。
- 谢谢你的回答,不过我还是有一点担心。我确实按照这些步骤从我的报告中删除了文件。我在Github验证过它们已经不存在了。当我在GitHub中以zip格式下载我的repo时,它的容量小于1MB,但是当我进行Git克隆时,它仍然是100MB。克隆后,我发现MyRepo/.git/objects/pack/pack-b6b2b82ecd58c551c3648b9ca97e4f8b29rrt3c2.pack是99.8 MB。我怎样才能摆脱这个?
- @himalaymajumdar您可以将此问题作为新问题添加吗?这样你也会得到别人的帮助。
- @当然,这里是stackoverflow.com/questions/34592913/…
- 为了澄清,存在.idea目录中的文件,但不明确跟踪git中的目录。它们是隐式跟踪的,这意味着只要存储了某个文件,存储库中就存在该目录。
在本地进行初始提交时,不要将不需要的文件包含在存储库中。即。:
cd project_directory
git init
git add 。如果不想使用.gitignore,您可以移动/删除不应该在存储库中的文件。
承诺并推动。
如果要彻底清除存储库中的文件,请参阅此答案。
- 我确实尝试过"git filter branch-f--index filter"git rm--cached--ignore unmatch target。我在Github验证过它们已经不存在了。当我在GitHub中以zip格式下载我的repo时,它的容量小于1MB,但是当我进行Git克隆时,它仍然是100MB。克隆后,我发现MyRepo/.git/objects/pack/pack-b6b2b82ecd58c551c3648b9ca97e4f8b29rrt3c2.pack是99.8 MB。我怎样才能摆脱这个?
To avoid errors, do not initialize the new repository with README, license, or gitignore files. You can add these files after your project has been pushed to GitHub.
这有些误导。即使是第一次,在本地存储库中保存这些文件并在推送时将其包含在内也没有任何问题。
下面是一个更清晰的建议:
When creating your repository on GitHub, do not use the"Initialize this repository with a README" option, shown below:
This option is meant for brand new repositories, but will give you a headache if you use it when you're planning to push an existing repository. Here's why:
When you use this option you create a commit directly in GitHub. This commit does not exist anywhere in your local project.
When you push your existing project Git will not be able to resolve its history with the lone commit you created when initializing. The two repositories share no commits, and therefore cannot be automatically resolved against each other.
However, if you wish to include a README, .gitignore, or license file in your local repository and include these files when you push please feel free to do so.