作为初学者,克隆本地存储库是在同一个机器上开发和部署代码的好方法吗?如何?

As a beginner, is cloning a local repo a good way to dev and deploy code on the same box? How?

我是 Git 的新手,一般来说不是经验丰富的程序员。我使用的是普通的旧 Git 而不是乱用 GitHub。我终于到了第一次需要分支我的回购的地步,但是我有一个问题,我试图分支的文件是一个网络抓取脚本,我需要在我进行更改时继续正常工作它。我阅读了一些关于分支的内容并做了一个测试分支,我注意到分支会根据检出的分支修改工作目录中的代码。因此,如果我创建一个分支并检查它,一旦我修改它,Windows 任务计划程序将尝试 运行 修改后的文件。很明显,我需要在我的机器上的其他地方有一个功能性的 repo/version,Task Scheduler 可以查看并且我可以推送。

因为我实际上是 运行 单个文件脚本,所以我可以轻松地将它复制到其他地方并更新任务计划程序以指向那里。然后我可以在需要推送新“分支”时随时替换该文件(不再是真正的分支,因为我一次只处理一个功能)。但我正在努力成为好人并学习 Git 并正确地做事。

所以我想我的问题变成了:我应该在本地克隆吗?这是如何实现的?我曾尝试阅读有关克隆的内容,但我对如此多的克隆文档都集中在像 GitHub 这样的远程仓库上感到困惑。感谢您的帮助。

你能尝试使用裸存储库在本地克隆吗? 你可以在 https://www.geeksforgeeks.org/bare-repositories-in-git/ 阅读更多内容 前-

cd ${HOME}
mkdir FileName.git
cd FileName.git
git init --bare

现在你可以在这个 repo 中写你的东西了 然后你可以去任何其他位置说 /tmp

cd /tmp
git clone ${HOME}/FileName.git

这样你就可以像远程仓库一样使用你自己的目录

是的,而且很简单。

是的,原因如您所述:您正在学习 git。在本地克隆与在 GitHub 或任何地方克隆远程仓库的工作方式相同,唯一的区别是您使用的是目录路径,而不是 GitHub URL 或 SSH 路径。事实上,当您克隆本地存储库时,现有存储库将被视为新存储库的 远程。与 GitHub 存储库不同,您可以使用 git CLI 管理这两个存储库。

您甚至可以使新的存储库远离原始存储库,从任一端推送或拉取更改。但是,如果您使用它来习惯使用 GitHub 存储库,请保持单向关系,并在 下游 的存储库上进行开发是您作为 upstream 副本创建的副本,在本例中也是 origin 副本。让任务计划程序从上游存储库的工作树执行。

您希望您的设置最终看起来像这样:

origin/upstream:       path/to/origin/script.py
                                      README.md
                                      .git
                        
clone/downstream:      path/to/clone/script.py
                                     README.md
                                     .git

尽量不要被所有术语混淆,它们只是命名约定。 path/to/origin/ repo 将被不同地称为 upstreamoriginremote path/to/clone/ 回购。不,存储库的目录不必命名为“来源”或“克隆”——上面的路径和文件只是示例。

步骤

  1. 将您现有的存储库移动到您想要 运行 计划任务的位置。如果它已经存在,那就太好了。

  2. 在您的命令行中,cd 到您希望新克隆目录所在的目录。

  3. 执行以下操作:

    git clone path/to/origin
    

    使用实际路径到您在第 1 步中放置它的任何位置。

    这模仿了您用来克隆 GitHub 存储库的 git clone github.com/path/to/origin 命令。

    它将在当前目录中创建一个与您正在克隆的目录同名的新目录。如果出于某种原因你需要它有一个不同的名字,例如如果源和克隆在同一个父目录中,请改用此命令:

    git clone path/to/origin path/to/clone
    

    新目录将包含一个 git 存储库(.git 目录)并且主分支中的所有文件都将被检出。

    如果你搞砸了,没什么大不了的。删除新创建的目录(不是origin!),重新开始。

  4. 您可以通过 cd-ing 进入克隆目录并键入:

    来确认两个 repos 之间的关系
    git remote -v
    

    默认情况下,您会看到遥控器的名称为“origin”。正如我所说,这只是一个约定,您实际上可以更改名称,但作为初学者最好坚持使用默认值。

  5. 要查看两个仓库中的所有分支,并确认两个仓库中 main/master 分支之间的跟踪关系,请键入:

    git branch -vva
    

基本工作流程

  • 在克隆存储库中完成所有工作

  • 根据需要将新提交、新分支等推送到您的远程(也称为上游、源)存储库,例如:

    git push
    

    当你在一个有远程跟踪分支的分支中时,你不需要指定推送目的地(你在上面的第 5 步中看到的)。

    此步骤只是同步您推送到远程 git 回购数据库的任何内容。它不会更新签出到其工作树中的内容。换句话说,您的计划任务将继续执行与 运行ning 之前相同版本的代码。

  • 要更新计划任务执行的内容,cd 到该 repo 并执行 git 命令以检查您希望它继续执行的代码的任何版本。如果它只是分支上的最新提交,它已经结帐了,这很简单:

    git pull
    

更高级一点

如果你想更好地模仿依赖中央回购服务器的设置(例如 GitHub),你将拥有三个相关的回购协议,如下所示:

           origin/upstream
                |  | 
          ______|  |_____
          |              |
     dev clone           |
                     deploy clone  <-- your scheduled task runs in this repo                     

希望这对您有所帮助。如果您有任何问题,请告诉我。

should I clone locally?

没有。我要反驳 Inigo 的回答。原因是推送到一个非裸仓库太充满陷阱了。

我建议即使对于初学者来说,正确的方法也是在 Inigo 的回答末尾看到的方法:将部署文件夹推送到远程仓库作为其部署分支,将远程仓库克隆到另一个文件夹,然后在该文件夹中创建一个开发分支并在那里进行实验。

这样,您在试验时将开发分支作为备份推送到远程,如果试验成功,您推送开发仓库,然后获取部署仓库并将开发分支合并到部署分支。

这是使用 Git 的简洁方法。是的,它假定您在部署新版本时有 Internet 连接,但肯定这不是什么要求。