mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-16 22:42:21 +08:00
Merge remote-tracking branch 'LCTT/master'
This commit is contained in:
commit
e0ea595261
@ -0,0 +1,196 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (lxbwolf)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-12244-1.html)
|
||||
[#]: subject: (Managing Git projects with submodules and subtrees)
|
||||
[#]: via: (https://opensource.com/article/20/5/git-submodules-subtrees)
|
||||
[#]: author: (Manaswini Das https://opensource.com/users/manaswinidas)
|
||||
|
||||
使用子模块和子树来管理 Git 项目
|
||||
======
|
||||
|
||||
> 使用子模块和子树来帮助你管理多个存储库中共有的子项目。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202005/23/201323myyhob22eg2y2jqt.jpg)
|
||||
|
||||
如果你参与了开源项目的开发,那么你很可能已经用了 Git 来管理你的源码。你可能遇到过有很多依赖和/或子项目的项目。你是如何管理它们的?
|
||||
|
||||
对于一个开源组织,要实现社区**和**产品的单一来源文档和依赖管理比较棘手。文档和项目往往会碎片化和变得冗余,这致使它们很难维护。
|
||||
|
||||
### 必要性
|
||||
|
||||
假设你想把单个项目作为一个存储库内的子项目,传统的方法是把该项目复制到父存储库中,但是,如果你想要在多个父项目中使用同一个子项目呢?如果把子项目复制到所有父项目中,当有更新时,你都要在每个父项目中做修改,这是不太可行的。这会导致父项目中的冗余和数据不一致,使更新和维护子项目变得很困难。
|
||||
|
||||
### Git 子模块和子树
|
||||
|
||||
如果你可以用一条命令把一个项目放进另一个项目中,会怎样呢?如果你随时可以把一个项目作为子项目添加到任意数目的项目中,并可以同步更新修改呢?Git 提供了这类问题的解决方案:Git <ruby>子模块<rt>submodule</rt></ruby>和 Git <ruby>子树<rt>subtree</rt></ruby>。创建这些工具的目的是以更加模块化的水平来支持共用代码的开发工作流,旨在 Git 存储库<ruby>源码管理<rt>source-code management</rt></ruby>(SCM)与它下面的子树之间架起一座桥梁。
|
||||
|
||||
![Cherry tree growing on a mulberry tree][2]
|
||||
|
||||
*生长在桑树上的樱桃树*
|
||||
|
||||
下面是本文要详细介绍的概念的一个真实应用场景。如果你已经很熟悉树形结构,这个模型看起来是下面这样:
|
||||
|
||||
![Tree with subtrees][3]
|
||||
|
||||
### Git 子模块是什么?
|
||||
|
||||
Git 在它默认的包中提供了子模块,子模块可以把 Git 存储库嵌入到其他存储库中。确切地说,Git 子模块指向子树中的某次提交。下面是我 [Docs-test][4] GitHub 存储库中的 Git 子模块的样子:
|
||||
|
||||
![Git submodules screenshot][5]
|
||||
|
||||
[文件夹@提交 Id][6] 格式表明这个存储库是一个子模块,你可以直接点击文件夹进入该子树。名为 `.gitmodules` 的配置文件包含所有子模块存储库的详细信息。我的存储库的 `.gitmodules` 文件如下:
|
||||
|
||||
![Screenshot of .gitmodules file][7]
|
||||
|
||||
你可以用下面的命令在你的存储库中使用 Git 子模块:
|
||||
|
||||
#### 克隆一个存储库并加载子模块
|
||||
|
||||
克隆一个含有子模块的存储库:
|
||||
|
||||
```
|
||||
$ git clone --recursive <URL to Git repo>
|
||||
```
|
||||
|
||||
如果你之前已经克隆了存储库,现在想加载它的子模块:
|
||||
|
||||
```
|
||||
$ git submodule update --init
|
||||
```
|
||||
|
||||
如果有嵌套的子模块:
|
||||
|
||||
```
|
||||
$ git submodule update --init --recursive
|
||||
```
|
||||
|
||||
#### 下载子模块
|
||||
|
||||
串行地连续下载多个子模块是很枯燥的工作,所以 `clone` 和 `submodule update` 会支持 `--jobs` (或 `-j`)参数:
|
||||
|
||||
例如,想一次下载 8 个子模块,使用:
|
||||
|
||||
```
|
||||
$ git submodule update --init --recursive -j 8
|
||||
$ git clone --recursive --jobs 8 <URL to Git repo>
|
||||
```
|
||||
|
||||
#### 拉取子模块
|
||||
|
||||
在运行或构建父项目之前,你需要确保依赖的子项目都是最新的。
|
||||
|
||||
拉取子模块的所有修改:
|
||||
|
||||
```
|
||||
$ git submodule update --remote
|
||||
```
|
||||
|
||||
#### 使用子模块创建存储库:
|
||||
|
||||
向一个父存储库添加子树:
|
||||
|
||||
```
|
||||
$ git submodule add <URL to Git repo>
|
||||
```
|
||||
|
||||
初始化一个已存在的 Git 子模块:
|
||||
|
||||
```
|
||||
$ git submodule init
|
||||
```
|
||||
|
||||
你也可以通过为 `submodule update` 命令添加 `--update` 参数在子模块中创建分支和追踪提交:
|
||||
|
||||
```
|
||||
$ git submodule update --remote
|
||||
```
|
||||
|
||||
#### 更新子模块的提交
|
||||
|
||||
上面提到过,一个子模块就是一个指向子树中某次提交的链接。如果你想更新子模块的提交,不要担心。你不需要显式地指定最新的提交。你只需要使用通用的 `submodule update` 命令:
|
||||
|
||||
```
|
||||
$ git submodule update
|
||||
```
|
||||
|
||||
就像你平时创建父存储库和把父存储库推送到 GitHub 那样添加和提交就可以了。
|
||||
|
||||
#### 从一个父存储库中删除一个子模块
|
||||
|
||||
仅仅手动删除一个子项目文件夹不会从父项目中移除这个子项目。想要删除名为 `childmodule` 的子模块,使用:
|
||||
|
||||
```
|
||||
$ git rm -f childmodule
|
||||
```
|
||||
|
||||
虽然 Git 子模块看起来很容易上手,但是对于初学者来说,有一定的使用门槛。
|
||||
|
||||
### Git 子树是什么?
|
||||
|
||||
Git <ruby>子树<rt> subtree</rt></ruby>,是在 Git 1.7.11 引入的,让你可以把任何存储库的副本作为子目录嵌入另一个存储库中。它是 Git 项目可以注入和管理项目依赖的几种方法之一。它在常规的提交中保存了外部依赖信息。Git 子树提供了整洁的集成点,因此很容易复原它们。
|
||||
|
||||
如果你参考 [GitHub 提供的子树教程][8]来使用子树,那么无论你什么时候添加子树,在本地都不会看到 `.gittrees` 配置文件。这让我们很难分辨哪个是子树,因为它们看起来很像普通的文件夹,但是它们却是子树的副本。默认的 Git 包中不提供带 `.gittrees` 配置文件的 Git 子树版本,因此如果你想要带 `.gittrees` 配置文件的 git-subtree 命令,必须从 Git 源码存储库的 [/contrib/subtree 文件夹][9] 下载 git-subtree。
|
||||
|
||||
你可以像克隆其他常规的存储库那样克隆任何含有子树的存储库,但由于在父存储库中有整个子树的副本,因此克隆过程可能会持续很长时间。
|
||||
|
||||
你可以用下面的命令在你的存储库中使用 Git 子树。
|
||||
|
||||
#### 向父存储库中添加一个子树
|
||||
|
||||
想要向父存储库中添加一个子树,首先你需要执行 `remote add`,之后执行 `subtree add` 命令:
|
||||
|
||||
```
|
||||
$ git remote add remote-name <URL to Git repo>
|
||||
$ git subtree add --prefix=folder/ remote-name <URL to Git repo> subtree-branchname
|
||||
```
|
||||
|
||||
上面的命令会把整个子项目的提交历史合并到父存储库。
|
||||
|
||||
#### 向子树推送修改以及从子树拉取修改
|
||||
|
||||
```
|
||||
$ git subtree push-all
|
||||
```
|
||||
|
||||
或者
|
||||
|
||||
```
|
||||
$ git subtree pull-all
|
||||
```
|
||||
|
||||
### 你应该使用哪个?
|
||||
|
||||
任何工具都有优缺点。下面是一些可能会帮助你决定哪种最适合你的特性:
|
||||
|
||||
* Git 子模块的存储库占用空间更小,因为它们只是指向子项目的某次提交的链接,而 Git 子树保存了整个子项目及其提交历史。
|
||||
* Git 子模块需要在服务器中可访问,但子树是去中心化的。
|
||||
* Git 子模块大量用于基于组件的开发,而 Git 子树多用于基于系统的开发。
|
||||
|
||||
Git 子树并不是 Git 子模块的直接可替代项。有明确的说明来指导我们该使用哪种。如果有一个归属于你的外部存储库,使用场景是向它回推代码,那么就使用 Git 子模块,因为推送代码更容易。如果你有第三方代码,且不会向它推送代码,那么使用 Git 子树,因为拉取代码更容易。
|
||||
|
||||
自己尝试使用 Git 子树和子模块,然后在评论中留下你的使用感想。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/20/5/git-submodules-subtrees
|
||||
|
||||
作者:[Manaswini Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/manaswinidas
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_web_internet_website.png?itok=g5B_Bw62 (Digital creative of a browser on the internet)
|
||||
[2]: https://opensource.com/sites/default/files/uploads/640px-bialbero_di_casorzo.jpg (Cherry tree growing on a mulberry tree)
|
||||
[3]: https://opensource.com/sites/default/files/subtree_0.png (Tree with subtrees)
|
||||
[4]: https://github.com/manaswinidas/Docs-test/
|
||||
[5]: https://opensource.com/sites/default/files/uploads/git-submodules_github.png (Git submodules screenshot)
|
||||
[6]: mailto:folder@commitId
|
||||
[7]: https://opensource.com/sites/default/files/uploads/gitmodules.png (Screenshot of .gitmodules file)
|
||||
[8]: https://help.github.com/en/github/using-git/about-git-subtree-merges
|
||||
[9]: https://github.com/git/git/tree/master/contrib/subtree
|
@ -1,245 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to install TT-RSS on a Raspberry Pi)
|
||||
[#]: via: (https://opensource.com/article/20/2/ttrss-raspberry-pi)
|
||||
[#]: author: (Patrick H. Mullins https://opensource.com/users/pmullins)
|
||||
|
||||
How to install TT-RSS on a Raspberry Pi
|
||||
======
|
||||
Read your news feeds while keeping your privacy intact with Tiny Tiny
|
||||
RSS.
|
||||
![Raspberries with pi symbol overlay][1]
|
||||
|
||||
[Tiny Tiny RSS][2] (TT-RSS) is a free and open source web-based news feed (RSS/Atom) reader and aggregator. It's ideally suited to those who are privacy-focused and still rely on RSS for their daily news. Tiny Tiny RSS is self-hosted software, so you have 100% control of the server, your data, and your overall privacy. It also supports a wide range of plugins, add-ons, and themes, Want a dark mode interface? No problem. Want to filter your incoming news based on keywords? TT-RSS has you covered there, as well.
|
||||
|
||||
![Tiny Tiny RSS screenshot][3]
|
||||
|
||||
Now that you know what TT-RSS is and why you may want to use it, I'll explain everything you need to know about installing it on a Raspberry Pi or a Debian 10 server.
|
||||
|
||||
### Install and configure TT-RSS
|
||||
|
||||
To install TT-RSS on a Raspberry Pi, you must also install and configure the latest version of PHP (7.3 as of this writing), PostgreSQL for the database backend, the Nginx web server, Git, and finally, TT-RSS.
|
||||
|
||||
#### 1\. Install PHP 7
|
||||
|
||||
Installing PHP 7 is, by far, the most involved part of this process. Thankfully, it's not as difficult as it might appear. Start by installing the following support packages:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y ca-certificates apt-transport-https`
|
||||
```
|
||||
|
||||
Now, add the repository PGP key:
|
||||
|
||||
|
||||
```
|
||||
`$ wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -`
|
||||
```
|
||||
|
||||
Next, add the PHP repository to your apt sources:
|
||||
|
||||
|
||||
```
|
||||
`$ echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list`
|
||||
```
|
||||
|
||||
Then update your repository index:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt update`
|
||||
```
|
||||
|
||||
Finally, install PHP 7.3 (or the latest version) and some common components:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y php7.3 php7.3-cli php7.3-fpm php7.3-opcache php7.3-curl php7.3-mbstring php7.3-pgsql php7.3-zip php7.3-xml php7.3-gd php7.3-intl`
|
||||
```
|
||||
|
||||
The command above assumes you're using PostgreSQL as your database backend and installs **php7.3-pgsql**. If you'd rather use MySQL or MariaDB, you can easily change this to **php7.3-mysql**.
|
||||
|
||||
Next, verify that PHP is installed and running on your Raspberry Pi:
|
||||
|
||||
|
||||
```
|
||||
`$ php -v`
|
||||
```
|
||||
|
||||
Now it's time to install and configure the webserver.
|
||||
|
||||
#### 2\. Install Nginx
|
||||
|
||||
Nginx can be installed via apt with:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y nginx`
|
||||
```
|
||||
|
||||
Modify the default Nginx virtual host configuration so that the webserver will recognize PHP files and know what to do with them:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo nano /etc/nginx/sites-available/default`
|
||||
```
|
||||
|
||||
You can safely delete everything in the original file and replace it with:
|
||||
|
||||
|
||||
```
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
|
||||
root /var/www/html;
|
||||
index index.html index.htm index.php;
|
||||
server_name _;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location ~ \\.php$ {
|
||||
include snippets/fastcgi-php.conf;
|
||||
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
Use **Ctrl+O** to save your new configuration file and then **Ctrl+X** to exit Nano. You can test your new configuration with:
|
||||
|
||||
|
||||
```
|
||||
`$ nginx -t`
|
||||
```
|
||||
|
||||
If there are no errors, restart the Nginx service:
|
||||
|
||||
|
||||
```
|
||||
`$ systemctl restart nginx`
|
||||
```
|
||||
|
||||
#### 3\. Install PostgreSQL
|
||||
|
||||
Next up is installing the database server. Installing PostgreSQL on the Raspberry Pi is super easy:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y postgresql postgresql-client postgis`
|
||||
```
|
||||
|
||||
Check to see if the database server was successfully installed by entering:
|
||||
|
||||
|
||||
```
|
||||
`$ psql --version`
|
||||
```
|
||||
|
||||
#### 4\. Create the Tiny Tiny RSS database
|
||||
|
||||
Before you can do anything else, you need to create a database that the TT-RSS software will use to store data. First, log into the PostgreSQL server:
|
||||
|
||||
|
||||
```
|
||||
`sudo -u postgres psql`
|
||||
```
|
||||
|
||||
Next, create a new user and assign a password:
|
||||
|
||||
|
||||
```
|
||||
`CREATE USER username WITH PASSWORD 'your_password' VALID UNTIL 'infinity';`
|
||||
```
|
||||
|
||||
Then create the database that will be used by TT-RSS:
|
||||
|
||||
|
||||
```
|
||||
`CREATE DATABASE tinyrss;`
|
||||
```
|
||||
|
||||
Finally, grant full permissions to the new user:
|
||||
|
||||
|
||||
```
|
||||
`GRANT ALL PRIVILEGES ON DATABASE tinyrss to user_name;`
|
||||
```
|
||||
|
||||
That's it for the database. You can exit the **psql** app by typing **\q**.
|
||||
|
||||
#### 5\. Install Git
|
||||
|
||||
Installing TT-RSS requires Git, so install Git with:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install git -y`
|
||||
```
|
||||
|
||||
Now, change directory to wherever Nginx serves web pages:
|
||||
|
||||
|
||||
```
|
||||
`$ cd /var/www/html`
|
||||
```
|
||||
|
||||
Then download the latest source for TT-RSS:
|
||||
|
||||
|
||||
```
|
||||
`$ git clone https://git.tt-rss.org/fox/tt-rss.git tt-rss`
|
||||
```
|
||||
|
||||
Note that this process creates a new **tt-rss** folder.
|
||||
|
||||
#### 6\. Install and configure Tiny Tiny RSS
|
||||
|
||||
It's finally time to install and configure your new TT-RSS server. First, verify that you can open **<http://your.site/tt-rss/install/index.php>** in a web browser. If you get a **403 Forbidden** error, your permissions are not set properly on the **/var/www/html** folder. The following will usually fix this issue:
|
||||
|
||||
|
||||
```
|
||||
`$ chmod 755 /var/www/html/ -v`
|
||||
```
|
||||
|
||||
If everything goes as planned, you'll see the TT-RSS Installer page, and it will ask you for some database information. Just tell it the database username and password that you created earlier; the database name; **localhost** for the hostname; and **5432** for the port.
|
||||
|
||||
Click **Test Configuration** to continue. If all went well, you should see a red button labeled **Initialize Database.** Click on it to begin the installation. Once finished, you'll have a configuration file that you can copy and save as **config.php** in the TT-RSS directory.
|
||||
|
||||
After finishing with the installer, open your TT-RSS installation at **<http://yoursite/tt-rss/>** and log in with the default credentials (username: **admin**, password: **password**). The system will recommend that you change the admin password as soon as you log in. I highly recommend that you follow that advice and change it as soon as possible.
|
||||
|
||||
### Set up TT-RSS
|
||||
|
||||
If all went well, you can start using TT-RSS right away. It's recommended that you create a new non-admin user, log in as the new user, and start importing your feeds, subscribing, and configuring it as you see fit.
|
||||
|
||||
Finally, and this is super important, don't forget to read the [Updating Feeds][4] section on TT-RSS's wiki. It describes how to create a simple systemd service that will update your feeds. If you skip this step, your RSS feeds will not update automatically.
|
||||
|
||||
### Conclusion
|
||||
|
||||
Whew! That was a lot of work, but you did it! You now have your very own RSS aggregation server. Want to learn more about TT-RSS? I recommend checking out the official [FAQ][5], the [support][6] forum, and the detailed [installation][7] notes. Feel free to comment below if you have any questions or issues.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/20/2/ttrss-raspberry-pi
|
||||
|
||||
作者:[Patrick H. Mullins][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/pmullins
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/life-raspberrypi_0.png?itok=Kczz87J2 (Raspberries with pi symbol overlay)
|
||||
[2]: https://tt-rss.org/
|
||||
[3]: https://opensource.com/sites/default/files/uploads/tt-rss.jpeg (Tiny Tiny RSS screenshot)
|
||||
[4]: https://tt-rss.org/wiki/UpdatingFeeds
|
||||
[5]: https://tt-rss.org/wiki/FAQ
|
||||
[6]: https://community.tt-rss.org/c/tiny-tiny-rss/support
|
||||
[7]: https://tt-rss.org/wiki/InstallationNotes
|
@ -0,0 +1,244 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (lxbwolf)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to install TT-RSS on a Raspberry Pi)
|
||||
[#]: via: (https://opensource.com/article/20/2/ttrss-raspberry-pi)
|
||||
[#]: author: (Patrick H. Mullins https://opensource.com/users/pmullins)
|
||||
|
||||
怎样在树莓派上安装 TT-RSS
|
||||
======
|
||||
使用 Tiny Tiny RSS 来保护你阅读新闻 feed 时的隐私。
|
||||
![Raspberries with pi symbol overlay][1]
|
||||
|
||||
[Tiny Tiny RSS][2](TT-RSS)是一个免费开源的基于 web 的新闻 feed(RSS/Atom)阅读器和聚合工具。它非常适合那些对隐私很在意又依赖他们的日常消息的 RSS 的人。TT-RSS 是自运维的软件,因此你对服务器、你的数据以及你全部的隐私都有 100% 的掌控。它还支持大量的插件、扩展和主题。你喜欢深色的界面?没问题。你希望基于关键词过滤发来的消息?TT-RSS 也能让你得偿所愿。
|
||||
|
||||
![Tiny Tiny RSS screenshot][3]
|
||||
|
||||
现在你知道 TT-RSS 是什么了,那么为什么你可能会想用它呢?我会讲述要把它安装到树莓派或 Debian 10 服务器上你需要了解的所有的东西。
|
||||
|
||||
### 安装和配置 TT-RSS
|
||||
|
||||
要把 TT-RSS 安装到树莓派上,你还需要安装和配置最新版本的 PHP(本文撰写时 PHP 最新版本是 7.3)、后端数据库 PostgreSQL、Nginx web 服务器、Git,最后才是 TT-RSS。
|
||||
|
||||
#### 1\. 安装 PHP 7
|
||||
|
||||
安装 PHP 7 是整个过程中最重要的部分。幸运的是,它并不像看起来那样困难。从安装下面的支持包开始:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y ca-certificates apt-transport-https`
|
||||
```
|
||||
|
||||
现在,添加存储库 PGP key
|
||||
|
||||
|
||||
```
|
||||
`$ wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -`
|
||||
```
|
||||
|
||||
下一步,把 PHP 库添加到你的 apt 源:
|
||||
|
||||
|
||||
```
|
||||
`$ echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list`
|
||||
```
|
||||
|
||||
然后更新你的存储库索引:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt update`
|
||||
```
|
||||
|
||||
最后,安装 PHP 7.3(或最新版本)和一些通用组件:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y php7.3 php7.3-cli php7.3-fpm php7.3-opcache php7.3-curl php7.3-mbstring php7.3-pgsql php7.3-zip php7.3-xml php7.3-gd php7.3-intl`
|
||||
```
|
||||
|
||||
上面的命令默认你使用的后端数据库是 PostgreSQL,会安装 **php7.3-pgsql**。如果你想用 MySQL 或 MariaDB,你可以把命令参数改为 **php7.3-mysql**。
|
||||
|
||||
下一步,确认 PHP 已安装并在你的树莓派上运行着:
|
||||
|
||||
|
||||
```
|
||||
`$ php -v`
|
||||
```
|
||||
|
||||
现在是时候安装和配置 webserver 了。
|
||||
|
||||
#### 2\. 安装 Nginx
|
||||
|
||||
可以用下面的命令安装 Nginx:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y nginx`
|
||||
```
|
||||
|
||||
修改默认的 Nginx 虚拟主机配置,这样 webserver 才能识别 PHP 文件以及知道如何处理它们。
|
||||
|
||||
|
||||
```
|
||||
`$ sudo nano /etc/nginx/sites-available/default`
|
||||
```
|
||||
|
||||
你可以安全地删除原文件中的所有内容,用下面的内容替换:
|
||||
|
||||
|
||||
```
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
|
||||
root /var/www/html;
|
||||
index index.html index.htm index.php;
|
||||
server_name _;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location ~ \\.php$ {
|
||||
include snippets/fastcgi-php.conf;
|
||||
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
按 **Ctrl+O** 保存修改后的配置文件,然后按 **Ctrl+X** 退出 Nano。你可以用下面的命令测试你的新配置文件:
|
||||
|
||||
|
||||
```
|
||||
`$ nginx -t`
|
||||
```
|
||||
|
||||
如果没有报错,重启 Nginx 服务:
|
||||
|
||||
|
||||
```
|
||||
`$ systemctl restart nginx`
|
||||
```
|
||||
|
||||
#### 3\. 安装 PostgreSQL
|
||||
|
||||
接下来是安装数据库服务器。在树莓派上安装 PostgreSQL 超级简单:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install -y postgresql postgresql-client postgis`
|
||||
```
|
||||
|
||||
输入下面的命令看一下数据库服务器安装是否成功:
|
||||
|
||||
|
||||
```
|
||||
`$ psql --version`
|
||||
```
|
||||
|
||||
#### 4\. 创建 Tiny Tiny RSS 数据库
|
||||
|
||||
在做其他事之前,你需要创建一个数数据库,用来给 TT-RSS 软件保存数据。首先,登录 PostgreSQL 服务器:
|
||||
|
||||
|
||||
```
|
||||
`sudo -u postgres psql`
|
||||
```
|
||||
|
||||
下一步,新建一个用户,设置密码:
|
||||
|
||||
|
||||
```
|
||||
`CREATE USER username WITH PASSWORD 'your_password' VALID UNTIL 'infinity';`
|
||||
```
|
||||
|
||||
然后创建一个给 TT-RSS 用的数据库:
|
||||
|
||||
|
||||
```
|
||||
`CREATE DATABASE tinyrss;`
|
||||
```
|
||||
|
||||
最后,给新建的用户赋最高权限:
|
||||
|
||||
|
||||
```
|
||||
`GRANT ALL PRIVILEGES ON DATABASE tinyrss to user_name;`
|
||||
```
|
||||
|
||||
这是安装数据库的步骤。你可以输入 **\q** 来退出 **psql** 程序。
|
||||
|
||||
#### 5\. 安装 Git
|
||||
|
||||
安装 TT-RSS 需要用 Git,所以输入下面的命令安装 Git:
|
||||
|
||||
|
||||
```
|
||||
`$ sudo apt install git -y`
|
||||
```
|
||||
|
||||
现在,进入到 Nginx 服务器的根目录:
|
||||
|
||||
|
||||
```
|
||||
`$ cd /var/www/html`
|
||||
```
|
||||
|
||||
下载 TT-RSS 最新源码:
|
||||
|
||||
|
||||
```
|
||||
`$ git clone https://git.tt-rss.org/fox/tt-rss.git tt-rss`
|
||||
```
|
||||
|
||||
注意,这一步会创建一个 **tt-rss** 文件夹。
|
||||
|
||||
#### 6\. 安装和配置Tiny Tiny RSS
|
||||
|
||||
现在是安装和配置你的新 TT-RSS 服务器的最后时刻了。首先,确认下你在浏览器中能打开 **<http://your.site/tt-rss/install/index.php>**。如果浏览器显示 **403 Forbidden**,那么就证明 **/var/www/html** 文件夹的权限没有设置正确。下面的命令通常能解决这个问题:
|
||||
|
||||
|
||||
```
|
||||
`$ chmod 755 /var/www/html/ -v`
|
||||
```
|
||||
|
||||
如果一切正常,你会看到 TT-RSS 安装页面,它会让你输入一些数据的信息。你只需要输入前面你创建的数据库用户名和密码;数据库名;主机名填 **localhost**;端口填 **5432**。
|
||||
|
||||
点击 **检测配置**。如果一切正常,你会看到一个有**初始化数据库**标签的红色按钮。点击它来开始安装。结束后,你会看到一个配置文件,你可以把它复制到 TT-RSS 的目录,另存为 **config.php**。
|
||||
|
||||
安装过程结束后,浏览器输入 **<http://yoursite/tt-rss/>** 打开 TT-RSS,使用默认的凭证登录(用户名:**admin**,密码:**password**)。登录后系统会提示你修改密码。我强烈建议你尽快修改密码。
|
||||
|
||||
### 配置 TT-RSS
|
||||
|
||||
如果一切正常,你现在就可以开始使用 TT-RSS 了。建议你新建一个非管理员用户,使用新用户名登录,并开始导入你的 feed、订阅,按照你的意愿来配置它。
|
||||
|
||||
最后,并且是超级重要的事,不要忘了阅读 TT-RSS wiki 上的 [更新 Feed][4] 部分。它讲述了如何创建一个更新 feed 的简单系统服务。如果你跳过了这一步,你的 RSS feed 就不会自动更新。
|
||||
|
||||
### 总结
|
||||
|
||||
呵!工作量不小,但是你做完了!你现在有自己的 RSS 聚合服务器了。想了解 TT-RSS 更多的知识?我推荐你去看官方的 [FAQ][5],[支持的][6]论坛,和详细的[安装][7]笔记。如果你有任何问题,尽情地在下面评论吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/20/2/ttrss-raspberry-pi
|
||||
|
||||
作者:[Patrick H. Mullins][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/pmullins
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/life-raspberrypi_0.png?itok=Kczz87J2 (Raspberries with pi symbol overlay)
|
||||
[2]: https://tt-rss.org/
|
||||
[3]: https://opensource.com/sites/default/files/uploads/tt-rss.jpeg (Tiny Tiny RSS screenshot)
|
||||
[4]: https://tt-rss.org/wiki/UpdatingFeeds
|
||||
[5]: https://tt-rss.org/wiki/FAQ
|
||||
[6]: https://community.tt-rss.org/c/tiny-tiny-rss/support
|
||||
[7]: https://tt-rss.org/wiki/InstallationNotes
|
@ -1,209 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (lxbwolf)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Managing Git projects with submodules and subtrees)
|
||||
[#]: via: (https://opensource.com/article/20/5/git-submodules-subtrees)
|
||||
[#]: author: (Manaswini Das https://opensource.com/users/manaswinidas)
|
||||
|
||||
使用子模块和子仓库管理 Git 项目
|
||||
======
|
||||
使用子模块和子仓库来帮助你管理多个仓库中共有的子项目。
|
||||
![Digital creative of a browser on the internet][1]
|
||||
|
||||
如果你参与了开源项目的开发,那么你可能会用 Git 来管理你的源码。你可能遇到过有很多依赖和/或子项目的项目。你怎么管理它们?
|
||||
|
||||
对于一个开源组织,社区*和*产品想要实现单一来源文档和依赖管理比较棘手。文档和项目往往会碎片化和变得冗余,这致使它们很难维护。
|
||||
|
||||
### 必要性
|
||||
|
||||
假设你想要在一个仓库中把一个项目作为子项目来用。传统的方法是把该项目复制到父仓库中。但是,如果你想要在多个父项目中用同一个子项目呢?(如果)把子项目复制到所有父项目中,当有更新时,你不得不在每个父项目中都做修改,这是不太可行的。(因为)这会导致父项目中的冗余和数据不一致,也会使更新和维护子项目变得很困难。
|
||||
|
||||
### Git 子模块和子仓库
|
||||
|
||||
如果你可以用一条命令把一个项目放进另一个项目中,会怎样呢?如果你随时可以把一个项目作为子项目添加到任意数目的项目中,并可以同步更新修改呢?Git 提供了这类问题的解决方案:Git 子模块和 Git 子仓库。创建这些工具的目的是以更加模块化的水平来支持共用代码的开发工作流,(创建者)意在消除 Git 仓库<ruby>源码管理<rt>source-code management</rt></ruby>与它下面的子仓库间的障碍。
|
||||
|
||||
![Cherry tree growing on a mulberry tree][2]
|
||||
|
||||
生长在桑树上的樱桃树
|
||||
|
||||
下面是本文要详细介绍的概念的一个真实应用场景。如果你已经很熟悉 tree,这个模型看起来是下面这样:
|
||||
|
||||
![Tree with subtrees][3]
|
||||
|
||||
CC BY-SA opensource.com
|
||||
|
||||
### Git 子模块是什么?
|
||||
|
||||
Git 在它默认的包中提供了子模块,子模块可以把 Git 仓库嵌入到其他仓库中。确切地说,Git 子模块是指向子仓库中的某次提交。下面是我 [Docs-test][4] GitHub 仓库中的 Git 子模块:
|
||||
|
||||
![Git submodules screenshot][5]
|
||||
|
||||
**[文件夹@提交 Id][6]** 格式表明这个仓库是一个子模块,你可以直接点击文件夹进入该子仓库。名为 **.gitmodules** 的配置文件包含所有子模块仓库的详细信息。我的仓库的 **.gitmodules** 文件如下:
|
||||
|
||||
![Screenshot of .gitmodules file][7]
|
||||
|
||||
你可以用下面的命令在你的仓库中使用 Git 子模块:
|
||||
|
||||
#### 克隆一个仓库并加载子模块
|
||||
|
||||
克隆一个含有子模块的仓库:
|
||||
|
||||
|
||||
```
|
||||
`$ git clone --recursive <URL to Git repo>`
|
||||
```
|
||||
|
||||
如果你之前已经克隆了仓库,现在想加载它的子模块:
|
||||
|
||||
|
||||
```
|
||||
`$ git submodule update --init`
|
||||
```
|
||||
|
||||
如果有嵌套的子模块:
|
||||
|
||||
|
||||
```
|
||||
`$ git submodule update --init --recursive`
|
||||
```
|
||||
|
||||
#### 下载子模块
|
||||
|
||||
串行地连续下载多个子模块是很枯燥的工作,所以 **clone** 和 **submodule update** 会支持 **\--jobs** 或 **-j** 参数:
|
||||
|
||||
例如,想一次下载 8 个子模块,使用:
|
||||
|
||||
|
||||
```
|
||||
$ git submodule update --init --recursive -j 8
|
||||
$ git clone --recursive --jobs 8 <URL to Git repo>
|
||||
```
|
||||
|
||||
#### 拉取子模块
|
||||
|
||||
在运行或构建父项目之前,你需要确保依赖的子项目都是最新的。
|
||||
|
||||
拉取子模块的所有修改:
|
||||
|
||||
|
||||
```
|
||||
`$ git submodule update --remote`
|
||||
```
|
||||
|
||||
#### 使用 submodule 创建仓库:
|
||||
|
||||
向一个父仓库添加子仓库:
|
||||
|
||||
|
||||
```
|
||||
`$ git submodule add <URL to Git repo>`
|
||||
```
|
||||
|
||||
初始化一个已存在的 Git 子模块:
|
||||
|
||||
|
||||
```
|
||||
`$ git submodule init`
|
||||
```
|
||||
|
||||
你也可以通过为 **submodule update** 命令添加 **\--update** 参数在子模块中创建分支和追踪提交:
|
||||
|
||||
|
||||
```
|
||||
`$ git submodule update --remote`
|
||||
```
|
||||
|
||||
#### 更新子模块提交
|
||||
|
||||
上面提到过,一个子模块就是一个指向子仓库中某次提交的链接。如果你想更新子模块的提交,不要担心。你不需要显式地指定最新的提交。你只需要使用通用的 **submodule update** 命令:
|
||||
|
||||
|
||||
```
|
||||
`$ git submodule update`
|
||||
```
|
||||
|
||||
就像你平时创建父仓库和把父仓库推送到 GitHub 那样添加和提交就可以了。
|
||||
|
||||
#### 从一个父仓库中删除一个子模块
|
||||
|
||||
仅仅手动删除一个子项目文件夹不会从父项目中移除这个子项目。想要删除名为 **childmodule** 的子模块,使用:
|
||||
|
||||
|
||||
```
|
||||
`$ git rm -f childmodule`
|
||||
```
|
||||
|
||||
虽然 Git 子模块看起来很容易上手,但是对于初学者来说,有一定的使用门槛。
|
||||
|
||||
### Git 子仓库是什么?
|
||||
|
||||
Git 子仓库,是在 Git 1.7.11 引入的,让你可以把任何仓库的副本作为子目录嵌入另一个仓库中。它是 Git 项目可以注入和管理项目依赖的几种方法之一。它在常规的提交中保存了外部依赖信息。Git 子仓库提供了整洁的集成点,因此很容易复原它们。
|
||||
|
||||
如果你参考 [GitHub 提供的子仓库教程][8] 来使用子仓库,那么无论你什么时候添加子仓库,在本地都不会看到 **.gittrees** 配置文件。这让我们很难分辨哪个是子仓库,因为它们看起来很像普通的文件夹,但是它们却是子仓库的副本。默认的 Git 包中不提供带 **.gittrees** 配置文件的 Git 子仓库版本,因此如果你想要带 **.gittrees** 配置文件的 git-subtree,必须从 Git 源码仓库的 [**/contrib/subtree** 文件夹][9] 下载 git-subtree。
|
||||
|
||||
你可以像克隆其他常规的仓库那样克隆任何含有子仓库的仓库,但由于在父仓库中有整个子仓库的副本,因此克隆过程可能会持续很长时间。
|
||||
|
||||
你可以用下面的命令在你的仓库中使用 Git 子仓库。
|
||||
|
||||
#### 向父仓库中添加一个子仓库
|
||||
|
||||
想要向父仓库中添加一个子仓库,首先你需要执行 **remote add**,之后执行 **subtree add** 命令:
|
||||
|
||||
|
||||
```
|
||||
$ git remote add remote-name <URL to Git repo>
|
||||
$ git subtree add --prefix=folder/ remote-name <URL to Git repo> subtree-branchname
|
||||
```
|
||||
|
||||
上面的命令会把整个子项目的提交历史合并到父仓库。
|
||||
|
||||
#### 向子仓库推送修改以及从子仓库拉取修改
|
||||
|
||||
|
||||
```
|
||||
`$ git subtree push-all`
|
||||
```
|
||||
|
||||
或者
|
||||
|
||||
|
||||
```
|
||||
`$ git subtree pull-all`
|
||||
```
|
||||
|
||||
### 你应该使用哪个?
|
||||
|
||||
任何工具都有优缺点。下面是一些可能会帮助你决定哪种最适合你的特性:
|
||||
|
||||
* Git 子模块的仓库占用空间更小,因为它们只是指向子项目的某次提交的链接,而 Git 子仓库保存了整个子项目及其提交历史。
|
||||
* Git 子模块需要在服务器中可访问,但子仓库是去中心化的。
|
||||
* Git 子模块大量用于基于组件的开发,而 Git 子仓库多用于基于系统的开发。
|
||||
|
||||
Git 子仓库并不是 Git 子模块的直接可替代项。有明确的说明来指导我们该使用哪种。如果有一个归属于你的外部仓库,使用场景是向它回推代码,那么就使用 Git 子模块,因为推送代码更容易。如果你有第三方代码,且不会向它推送代码,那么使用 Git 子仓库,因为拉取代码更容易。
|
||||
|
||||
自己尝试使用 Git 子仓库和子模块,然后在评论中留下你的使用感想。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/20/5/git-submodules-subtrees
|
||||
|
||||
作者:[Manaswini Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/manaswinidas
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_web_internet_website.png?itok=g5B_Bw62 (Digital creative of a browser on the internet)
|
||||
[2]: https://opensource.com/sites/default/files/uploads/640px-bialbero_di_casorzo.jpg (Cherry tree growing on a mulberry tree)
|
||||
[3]: https://opensource.com/sites/default/files/subtree_0.png (Tree with subtrees)
|
||||
[4]: https://github.com/manaswinidas/Docs-test/
|
||||
[5]: https://opensource.com/sites/default/files/uploads/git-submodules_github.png (Git submodules screenshot)
|
||||
[6]: mailto:folder@commitId
|
||||
[7]: https://opensource.com/sites/default/files/uploads/gitmodules.png (Screenshot of .gitmodules file)
|
||||
[8]: https://help.github.com/en/github/using-git/about-git-subtree-merges
|
||||
[9]: https://github.com/git/git/tree/master/contrib/subtree
|
Loading…
Reference in New Issue
Block a user