- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对自己创造的一个场景感到困惑。我在github上创建了一个存储库(我们称之为a)并将代码推送到它上面。之后,我将该存储库克隆到本地(我们称之为b),这样本地的源代码就是远程repo a。
现在,我从本地B克隆来创建另一个本地实例C。
A → B → C
git push origin
git push upstream
最佳答案
一些基本的东西
无论何时git clone
,从开发人员的角度来看,您都需要处理刚刚克隆的代码。所以git给了你一个“工作树”来工作。它之所以被称为树,是因为当你考虑到你所做的所有提交和分支并把它们放在一个图上时,它就像一棵树。
克隆的存储库称为非裸存储库。要创建一个非裸存储库,只需执行一个简单的git init
-这就是原始程序员开始用git跟踪克隆代码所做的。您也可以将其克隆到一个裸存储库中,但是它的细节和有用性应该是它自己在一个恰当的问题中的答案。
裸存储库不包含工作树。它只是用来存储您的代码——如果您愿意的话,它是由git管理的代码的服务器。要创建一个裸存储库,可以执行一个简单的git init --bare name_of_repository.git
。它将创建一个名为name_of_repository.git的目录,其中包含git所需的所有文件。git扩展只是一个使用的约定;它不是必需的,可以是任何东西,也可以是完全没有的。
git中有一个类似指针的东西,叫做head。它指向您工作的分支中活动的最新提交,无论它是裸存储库还是非裸存储库。
分支就像是刚刚从远程存储库中提取的代码的“不同副本”(可能有不同的修改或没有修改)。它有开发人员认为合适的任何名称。它们很有用,因为您可以处理不同的函数或修复不同的问题,而不必担心您或其他人正在开发的当前代码。稍后,您可以将所有内容合并到主分支(通常是主分支),然后删除不再需要的合并分支。
git尽量避免不同位置或分支的文件版本之间的问题。所以他不允许你在某些情况下,至少可以说是混乱的。git永远不会出错,因为它要求您检查、更改或强制您正在做的事情。所以任何错误都不是吉特的错,而是你的错。
了解情况
让我们考虑一下:
A存储库是一个裸存储库。B和C存储库都是非裸存储库。这意味着a没有工作目录,仅用于存储。B和C用于你需要做的工作。
一般来说,你(通常)有分支。通常,初学者不会创建分支,因为他正在学习,甚至可能还不知道分支-尽管它们有很多原因是有用的。所以他几乎总是在一个'主'分支-默认分支。
这就是说,假设你修改了b中的一些文件,你想修改多少次就修改多少次,最后甚至修改了agit push
。或者你什么都不做。但你是主枝。
稍后,您将修改C中的文件,并提交并尝试推送到A。记住:您是C的主分支,git commit
可以工作!
然后,你也试着把C推到B。它不起作用。
结果:git将(不是)字面上的尖叫,警告您试图玷污(更新)非裸存储库b的主分支,其头部指向另一个提交!如果他让你做推送,你会把git在存储库b上跟踪的历史搞砸,它再也不知道b发生了什么事!您甚至可以用B上的相同名称覆盖对该分支的修改!所以不,如果两者都是非裸存储库,就不能从c推到b!
现在怎么办?!我的世界会这样结束吗?!我能做什么?!吉特怎么可能无视主人的意愿?!这纯粹是异端!
解决方案
1-在B上有两个分支-主分支和一个临时分支。把头指向临时分支。例子:
cd B # change to B's working directory
git branch temp # create 'temp' branch
git checkout temp # change from master branch to branch temp
cd ../C # change to C's working directory
git pull B master # pulls B's modifications to C
git push B master # pushes C's mods to B's master branch
cd ../B # change to B's working directory
git checkout master # change from temp branch to branch master
git branch -d temp # delete branch temp
git push
创建新分支;
git push
使头部指向这个新分支;
git branch name_of_the_branch
创建一个分支,并在一个命令中使头部指向该分支。我用更长的方法是因为你也应该知道更长的方法;
关于git - 为什么我不能推送到非裸仓库的已 checkout 分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39616617/
Hortonworks 数据平台 HDP 3.0 有 spark 2.3 和 Hive 3.1,默认情况下 spark 2.3 应用程序(pyspark/spark-sql 等)使用 spark 数据
是否最好让一个软件仓库包含多个文件夹,这些文件夹映射到工作区中的不同路径。或者一个仓库中的多个文件夹映射到多个工作区,或多个仓库映射到多个工作区。 有人对此事有任何实用建议吗? 我还注意到,当我在仓库
Git 是分布式源代码控制系统,对吧。如何在没有集中存储库的情况下连接两个开发人员。 我们的团队使用 Github,如果两个开发人员想在同一个分支上工作,似乎需要将该分支推送到远程,然后他们才能访问它
Maven – 仓库 什么是 Maven 仓库? 在Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
我开始将 git 与我的 .git 目录以及网络根目录中的其他所有内容一起使用。进一步阅读后,这似乎是一种不好的做法。我现在将我的应用程序和系统文件夹放在网络根目录之外。我的网络根目录中唯一剩下的就是
有没有可能没有历史的 Git 仓库?例如,我有一个我工作的本地 Git 存储库,我想将最新版本推送到生产服务器。生产服务器上不应存储任何历史记录。我该怎么做? 最佳答案 你可以看到命令 git arc
Laravel 中的 Repositories 有什么优势?它似乎是从应用程序的业务逻辑中抽象出模型层。虽然这似乎只是让整个请求生命周期变得更加复杂,但收效甚微。 有人可以阐明 Laravel 存储库
我有一个本地 git 服务器在我的 NAS 上运行,我正在我的笔记本电脑和工作站上进行开发,所有这些都在我的本地网络中。所以,如果我想在一个新的空 repo 中开始一个项目,我会关注 this ans
我们正在使用 SVN 来存储 maven 依赖项(组织限制不能像现在那样使用 nexus 或 artifactory maven 存储库)。 SVN 在使用 https 协议(protocol)的网络
我想允许某人查看我在我的私有(private)存储库中所做的工作。我该怎么做? 我看了https://help.github.com/articles/making-a-private-reposit
我试图阻止同事在 git 中再次推送已删除的标签(因为它被错误地推送了一次)。 我知道如何在本地执行此操作以及如何将其推送到远程以及如何指示我的同事以正确的方式从他们的本地存储库中删除已删除的标签。
我已经使用 url 克隆了一个 friend 的 git repo git 克隆 https://github.com/user/repo_name.git 然后我创建了我的分支,提交并尝试将我的代码
我目前正在我的代理机构安排比赛。我想对开发人员可以使用的模块进行一些管理。 是否可以托管 Play 模块和 Maven 库的镜像存储库并将 play 配置为仅使用这些存储库? 我已阅读此内容 docu
我正在尝试在我的 readme.md 中嵌入图像用于在 GitHub 上显示。我以前在公共(public)存储库中没有遇到任何问题,格式如下: ![header image](https://raw.
我想访问公司内部Artifactory实例上自定义开发的Gradle插件。对于公司内部发生的每一个Gradle构建,我都希望如此。我是否缺少任何东西,或者建议的方法是在每个项目的每个Gradle构建之
我想保留我在 docker hub 帐户中使用的图像,同时保持对拉取图像的引用。就像你在 github 上 fork 一个项目一样。 目前我已经尝试过jwilder/nginx-proxy图片。现在我
Perforce 中是否有命令可以获取客户端从软件仓库映射到特定文件夹的信息? 示例: 我有仓库位置//depot/myfolder/somefile.java 我想知道哪些客户端将此位置映射到哪个路
我被指派为一个项目开发一项功能。在几周的时间里,我将花几天时间研究该功能。我将克隆中央仓库。然后我将在本地工作 3 周。在此过程中,我会多次将我的进度提交到我的 repo 协议(protocol)中。
我发现自己越来越喜欢将Rstudio与R markdown文件(.rmd)一起使用,并且我非常喜欢“编织HTML +发布到Rpubs”的便利与同事共享我的工作。不幸的是,发布的文件必须是公开可见的,而
我是一名优秀的程序员,十分优秀!