基于Github仓库创建本地Git仓库并保持同步更新

10

我有一些基础的git知识,但不确定如何完成这个任务。

我想要复制Github上WordPress starter主题underscores。我的想法是在该存储库的基础上创建一个基本框架(带有一些修改)。然后使用该框架作为基础创建其他主题。

具体步骤如下:

  1. 将Github上的underscores存储库复制到本地

  2. 根据underscores的内容,在其基础上创建一个名为my_framework的本地存储库,并始终修改某些部分(例如名称),并添加一些其他文件

  3. 基于my_framework创建新的本地存储库my_theme1my_theme2

目标是使框架和主题始终与任何underscores更新保持同步,同时更改和修改框架和主题。一旦从Github拉取内容,它应该保持(或通知)任何更新,但我不需要我在本地做的任何更改回到路径中。

我不确定应该遵循哪个路径,希望能得到任何帮助或指针。

5个回答

10
目标是保持所有内容与任何下划线更新同步,同时更改和修改框架和主题。这被称为三角工作流

https://istack.dev59.com/Lx7do.webp

  • fork (see "Fork a Repo") the repo automattic/_s
  • clone that fork locally,

    git clone /url/my/fork myfork
    
  • add as remote upstream the original repo

    cd myfork
    git remote add upstream https://github.com/automattic/_s
    

从那里开始,使用 git 2.9 或更高版本,进行配置:

git config --global pull.rebase true
git config --global rebase.autoStash true

最后,每次您想要更新分支(在这里修改原始存储库的自己版本),请执行

git checkout mybranch
git fetch upstream
git rebase upstream/master

然后,在测试后,您可以将更新的分支合并到其他从 myfork 克隆而来的存储库 my_theme1my_theme2 中。
cd my_theme1
git fetch
git merge origin/mybranch

如果你只想在本地工作,可以跳过 fork 步骤直接克隆原始仓库。

因为您没有推送到原始存储库的权限。 - VonC
@Alvaro "fork local (probably not a fork but maybe a clone?)": 确切地说,如果在GitHub上没有进行分叉,它就变成了一个简单的克隆。 - VonC
@Alvaro 是的:如果你想要推送回去,你需要将代码推送到你自己的仓库(这就是为什么要进行 fork 步骤,它会创建一个属于你自己的仓库)。 - VonC
@Alvaro 如果所有的东西都是本地的,你不需要分叉步骤:你可以直接克隆原始仓库,从不推送回去...但这并不是真正的Git方式;) 如果你的本地存储发生了任何问题,Git的所有“分布式”方面都无法保存你的工作。 - VonC
@Alvaro “我直接跳过第一步,直接从原始仓库克隆。” 没错。我已经编辑了答案,只包括这个步骤。 - VonC
显示剩余8条评论

2

你应该学习关于子主题的知识。它的概念是有一个主题 - 可以更新 - 和一个子主题,你可以修改、添加内容,创建不同的模板和样式......所有这些都可以根据你的需求进行。

我建议您花几分钟认真阅读这篇文章:https://codex.wordpress.org/Child_Themes


谢谢 @elicohenator。我知道子主题。问题是,现在每次我构建一个主题时,我都需要手动下载下划线源代码,替换名称,删除额外的内容,添加大量php、Grunt等,并从“零”开始构建(而我可以重复使用大部分源代码和文件)。因此,我认为将其组织、自动化并放在版本控制之下会很棒。 - Alvaro
你可以创建自己的下划线修改存储库,然后将其克隆到当前项目中。您可以在其中包含SASS文件、页面模板和其他所需的内容。(我正在使用一个名为FoundationPress的基础主题启动器来完成此操作) - elicohenator

1
假设您正在使用终端,请切换到主题目录:
cd [PROJECT]/wp-content/themes

现在将 _s 克隆到你的项目中:
git clone git@github.com:Automattic/_s.git [THENE-NAME]

克隆完成后,您可以开始使用新主题。进入主题目录:

cd到主题目录:

cd [THENE-NAME]

并为您的仓库创建另一个远程。
git remote add [NEW-RENOTE-NAME] [NEW-RENOTE-URL]

从现在开始,您可以将更改推入您的私有远程存储库:

git push [NEW-RENOTE-NAME] master

如果您想从_s存储库获取更新,只需执行以下操作:

git pull origin master

祝你好运!


0
你可以执行以下操作:
git clone https://github.com/Automattic/_s.git
如果在Windows上,创建目录 my_framework 使用 mkdir my_framework
cd my_framework
git init
git remote add <_s> <PATH to your local underscore>
git pull(获取underscore的最新版本)
接下来:
mkdir my_theme1
cd my_theme1
git init
git remote add <my_framework> <PATH to your local my_framework>
git pull

希望这是您要查找的内容!


0

您想要做的是所谓的嵌套git仓库。GitHub不允许嵌套存储库。您可以使用GitSubmodulesubtree。当项目变得更大时,这样做很有用。

下划线的一个副本将保留为“控制”。下划线的第二个副本将保留为my_framework的开头。第三个副本是my_framework的复制和修改。

您可以:

  1. 单独更新下划线repo,也就是WordPress起始主题下划线主分支
  2. 单独更改您的框架
  3. 向任何您想要贡献的地方发送拉取请求

my_theme1my_theme2不是版本,而是独立的软件。例如,my_theme1可以有无数个版本。以下是示例步骤:

cd ~ 
mkdir parentrepo 
cd parentrepo/ 
git init . 
mkdir child1 
mkdir child2 
cd child1/ 
git init . 
echo "FirstChildRepo content" > child1repofile.txt 
git add . 
git commit -a -m "Adding FirstChildRepo content" 
cd ../child2/ 
echo "SecondChildRepo content" > child2file.txt 
cd .. 
echo "parentrepofile" > parentFile.txt 
git add . 
git commit -a -m "Adding Parent Repo content" 
# verify whether working independently 
cd ~/parentrepo/ 
git log 
cd ~/parentrepo/Child1Repo/ 
git log 
# try cloning parent, verify the contents
cd ~ 
git clone parentrepo/ 
cd parentrepo/ 
ls -a 
./  ../  .git/  child1/  child2/  parentfile.txt 
cd child1/ 
ls -a 
./  ../ 

在此步骤之后,按照其他人编写的方式克隆和更新即可。

您也可以进行“自动更新”。将名为post-checkoutpost-merge的文件添加到所需仓库的.git/hooks目录中,并在每个文件中添加以下内容:

#!/bin/sh
git submodule update --init --recursive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接