我想将我的工作从非git启动的文件夹与远程git存储库合并。
以下作品:
git init
git add
git commit
git remote add origin [url]
git fetch
git rebase origin/master
git push -u origin master
另一种选择是:
git init
git add
git commit
git remote add origin [url]
git pull --allow-unrelated-histories origin master
git push -u origin master
但是--allow-unrelated-histories
很难写(git' s创作者不想实现快捷方式,因为"它是一个罕见的情况")我听说它更好在这种情况下,做一个rebase而不是merge。
你知道更快的方法吗?
修改
长版本:
我心甘情愿地跳过了工作流程部分直截了当,但这是我的工作流程,以了解原因(我记住你推荐的工作流程,但我不确定它适用于我的情况):
为什么我直接在ftp上工作:
- 所有集成在我的IDE中,我都可以进行修改"在飞行中"用一个软件
- 没有本地服务器使用
- 没有从本地到ftp的转移(除非合作者在GitHub上进行了更改)
- 网站的应付插件不是我的处置localy所以我不能有一个适当的本地测试环境
- 我曾经在localy工作但是当我因任何原因将代码转移到ftp时结果不同
我同意这可能是"手工制作"喜欢,但是因为我独自在代码上工作,所以它做得很好。现在还有另一个人,所以我们把代码放在GitHub上,然后用我提到的git命令解决了代码之间的同步问题。我有写代码的权限,所以我不需要fork / pull请求。我不需要永久保留当地的回购,所以我更喜欢擦拭它,但是如果SCM需要我保留我所有项目的本地回购,我会这样做,但是......我不会...喜欢它,因为我不需要它,这就是我在第一条消息中找到解决方案的原因。
你认为我应该有更好的工作流程吗?你是否认为我们应该在不同的分支上工作,即使是微小的变化(如果它允许我有一个更清晰的历史我会做,因为我喜欢保持有组织和精益,这就是为什么我使用rebase而不是合并)?
事实上,大背景问题是:大型团队如何将他们的GitHub代码与他们的ftp代码同步(并且在更新repo和实际的ftp repo之前检查新的GitHub代码在测试ftp文件夹上是否正常)?愚蠢的问题:他们是否从ftp做SCM(如何?这会很棒)?
我是SCM的新手,我问自己所有这些问题......
答案 0 :(得分:1)
你知道更快的方法吗?
这是一个错误的问题。正确的问题是:是什么驱使您在SCM之外做任何工作 - 在本地或远程回购之外?
什么是最快"将您的工作与远程仓库同步的方式是合法的,但由于您还没有提供有关工作流程的任何详细信息,我们无法确定答案。
我们可能会推荐一些其他策略来提供更多详细信息,但我认为您必须将事情变得更加复杂,特别是在合并与rebase问题方面,这必然意味着您的远程仓库,唯一的分支是主(!) - 您是否熟悉维护多个开发实验分支的Gitflow模型?您是否熟悉在Git中分支和合并有多容易?
Git是为分布式源代码管理而制作的 - 所以请用它! (即在开发过程中在本地使用它。)
如果我理解你的情况,我认为上述情况仍然可以正常进行。我建议在你的本地PC上创建一个Github仓库的镜像,你总是把它保存在那里。您仍然可以通过FTP在服务器上进行所有更改,因为您说这样更方便 - 但我要小心,因为那时(如果我理解的话),您正在更改实时网站。如果这适用于你的情况(包括没有首先测试新版本这样做的危险),那么这很好。
鉴于您的具体情况,我尝试以下两种方式 - 但我不能100%确定Git将如何与FTP交互(即希望它不会刷新现有文件的日期)或导致Git将其视为已更改的任何其他内容)
继续做你正在做的事情 - 除了在你的本地电脑上留下一个loco repo。此方法只会将您的更改作为新提交转储给master。
git add .
将所有更改添加到索引转到分支策略。仍然保留当地的回购
如果这一切看起来都不适合你 - 我会尝试另外发布的另一个解决方案。每次都不应该删除本地仓库,这样甚至可以省去一步,我想 - 或者只是让它成为一个获取而不是克隆?
答案 1 :(得分:0)
我真的认为我的另一个答案更好,但是这里有一个替代方法可以完全按照你的要求......
在您的开发文件夹的父级中,该文件夹不在回购中:
> git clone [repo URL] > cd [repo name] > mv ../[folder name of your stuff] . > git add . > git commit -m "added my stuff in folder [folder name of your stuff]"
基本上,你正在克隆repo 第一个,然后将你的开发文件夹移动到repo中,添加它,并将它提交给你需要的任何分支(我在这里假设了master)。
这可能会更短,可能更清晰 - 更容易理解,因为您在回购已经存在之后添加项目,因此您没有不同历史记录的单独主分支。
编辑:鉴于更新的历史记录,您甚至可以通过FTP直接从网站服务器直接进入本地仓库(而不是强制{{1})来缩短这一点。 }命令。
您也可以随时离开本地回购,只需将克隆更改为提取。