Changeset View
Changeset View
Standalone View
Standalone View
src/docs/user/userguide/diffusion_uris.diviner
| @title Diffusion User Guide: URIs | @title Diffusion User Guide: URIs | ||||
| @group userguide | @group userguide | ||||
| Guide to configuring repository URIs for fetching, cloning and mirroring. | Guide to configuring repository URIs for fetching, cloning and mirroring. | ||||
| Overview | Overview | ||||
| ======== | ======== | ||||
| WARNING: This document describes a feature which is still under development, | WARNING: This document describes a feature which is still under development, | ||||
| and is not necessarily accurate or complete. | and is not necessarily accurate or complete. | ||||
| Phabricator can host, observe, mirror, and proxy repositories. For example, | Phabricator can create, host, observe, mirror, proxy, and import repositories. | ||||
| here are some supported use cases: | For example, you can: | ||||
| **Host Repositories**: Phabricator can host repositories locally. Phabricator | **Host Repositories**: Phabricator can host repositories locally. Phabricator | ||||
| maintains the writable master version of the repository, and you can push and | maintains the writable master version of the repository, and you can push and | ||||
| pull the repository. This is the most straightforward kind of repository | pull the repository. This is the most straightforward kind of repository | ||||
| configuration, and similar to repositories on other services like GitHub or | configuration, and similar to repositories on other services like GitHub or | ||||
| Bitbucket. | Bitbucket. | ||||
| **Observe Repositories**: Phabricator can create a copy of an repository which | **Observe Repositories**: Phabricator can create a copy of an repository which | ||||
| Show All 18 Lines | |||||
| You can also import repositories by creating an empty hosted repository and | You can also import repositories by creating an empty hosted repository and | ||||
| then pushing everything to the repository directly. | then pushing everything to the repository directly. | ||||
| You configure the behavior of a Phabricator repository by adding and | You configure the behavior of a Phabricator repository by adding and | ||||
| configuring URIs and marking them to be fetched from, mirrored to, clonable, | configuring URIs and marking them to be fetched from, mirrored to, clonable, | ||||
| and so on. By configuring all the URIs that a repository should interact with | and so on. By configuring all the URIs that a repository should interact with | ||||
| and expose to users, you configure the read, write, and mirroring behavior | and expose to users, you configure the read, write, and mirroring behavior | ||||
| of the repository. | of the repository. | ||||
| The remainder of this document walks through this configuration in greater | |||||
| detail. | |||||
| Host a Repository | |||||
| ================= | |||||
| You can create new repositories that Phabricator will host, like you would | |||||
| create repositories on services like GitHub or Bitbucket. Phabricator will | |||||
| serve a read-write copy of the repository and you can clone it from Phabricator | |||||
| and push changes to Phabricator. | |||||
| If you haven't already, you may need to configure Phabricator for hosting | |||||
| before you can create your first hosted repository. For a detailed guide, | |||||
| see @{article:Diffusion User Guide: Repository Hosting}. | |||||
| This is the default mode for new repositories. To host a repository: | |||||
| - Create a new repository. | |||||
| - Activate it. | |||||
| Phabricator will create an empty repository and allow you to fetch from it and | |||||
| push to it. | |||||
| Observe a Repository | |||||
| ==================== | |||||
| If you have an existing repository hosted on another service (like GitHub, | |||||
| Bitbucket, or a private server) that you want to work with in Phabricator, | |||||
| you can configure Phabricator to observe it. | |||||
| When observing a repository, Phabricator will keep track of changes in the | |||||
| remote repository and allow you to browse and interact with the repository from | |||||
| the web UI in Diffusion and other applications, but you can continue hosting it | |||||
| elsewhere. | |||||
| To observe a repository: | |||||
| - Create a new repository, but don't activate it yet. | |||||
scode: FWIW, a pitfall we ran into was that during the initial import, unless you too steps to avoid… | |||||
Not Done Inline Actionsthis is the documented reason for those knobs existing. T9554 is related. eadler: this is the documented reason for those knobs existing. T9554 is related. | |||||
| - Add the remote URI you want to observe as a repository URI. | |||||
| - Set the **I/O Type** for the URI to **Observe**. | |||||
| - If necessary, configure a credential. | |||||
| - Activate the repository. | |||||
| Phabricator will perform an initial import of the repository, creating a local | |||||
| read-only copy. Once this process completes, it will continue keeping track of | |||||
| changes in the remote, fetching them, and reflecting them in the UI. | |||||
| Mirror a Repository | |||||
| =================== | |||||
| NOTE: Mirroring is not supported in Subversion. | |||||
| You can create a read-only mirror of an existing repository. Phabricator will | |||||
| push all changes made to the repository to the mirror. | |||||
| For example, if you have a repository hosted in Phabricator that you want to | |||||
| mirror to GitHub, you can configure Phabricator to automatically maintain the | |||||
| mirror. This is how the upstream repositories are set up. | |||||
| You can mirror any repository, even if Phabricator is only observing it and not | |||||
| hosting it directly. | |||||
| To begin mirroring a repository: | |||||
| - Create a hosted or observed repository by following the relevant | |||||
| instructions above. | |||||
| - Add the remote URI you want to mirror to as a repository URI. | |||||
| - Set the **I/O Type** for the URI to **Mirror**. | |||||
| - If necessary, configure a credential. | |||||
| To stop mirroring: | |||||
| - Disable the mirror URI; or | |||||
| - Change the **I/O Type** for the URI to **None**. | |||||
| Import a Repository | |||||
| =================== | |||||
| If you have an existing repository that you want to move so it is hosted on | |||||
| Phabricator, there are three ways to do it: | |||||
| **Push Everything**: //(Git, Mercurial)// Create a new empty hosted repository | |||||
| according to the instructions above. Once the empty repository initializes, | |||||
| push your entire existing repository to it. | |||||
| **Observe First**: //(Git, Mercurial)// Observe the existing repository first, | |||||
| according to the instructions above. Once Phabricator's copy of the repository | |||||
| is fully synchronized, change the **I/O Type** for the **Observe** URI to | |||||
| **None** to stop fetching changes from the remote. | |||||
| By default, this will automatically make Phabricator's copy of the repository | |||||
| writable, and you can begin pushing to it. If you've adjusted URI | |||||
| configuration away from the defaults, you may need to set at least one URI | |||||
| to **Read/Write** mode so you can push to it. | |||||
| **Copy on Disk**: //(Git, Mercurial, Subversion)// Create a new empty hosted | |||||
| repository according to the instructions above, but do not activate it yet. | |||||
| Using the **Storage** tab, find the location of the repository's working copy | |||||
| on disk, and place a working copy of the repository you wish to import there. | |||||
| For Git and Mercurial, use a bare working copy for best results. | |||||
| This is the only way to import a Subversion repository because only the master | |||||
| copy of the repository has history. | |||||
| Once you've put a working copy in the right place on disk, activate the | |||||
| repository. | |||||
| Customizing Displayed Clone URIs | |||||
| ================================ | |||||
| If you have an unusual configuration and want the UI to offers users specific | |||||
| clone URIs other than the URIs that Phabricator serves or interacts with, you | |||||
| can add those URIs with the **I/O Type** set to **None** and then set their | |||||
| **Display Type** to **Always**. | |||||
| Likewise, you can set the **Display Type** of any URIs you do //not// want | |||||
| to be visible to **Never**. | |||||
| This allows you to precisely configure which clone URIs are shown to users for | |||||
| a repository. | |||||
| Reference: I/O Types | |||||
| ==================== | |||||
| This section details the available **I/O Type** options for URIs. | |||||
| Each repository has some **builtin** URIs. These are URIs hosted by Phabricator | |||||
| itself. The modes available for each URI depend primarily on whether it is a | |||||
| builtin URI or not. | |||||
| **Default**: This setting has Phabricator guess the correct option for the | |||||
| URI. | |||||
| For **builtin** URIs, the default behavior is //Read/Write// if the repository | |||||
| is hosted, and //Read-Only// if the repository is observed. | |||||
| For custom URIs, the default type is //None// because we can not automatically | |||||
| guess if you want to ignore, observe, or mirror a URI and //None// is the | |||||
| safest default. | |||||
| **Observe**: Phabricator will observe this repository and regularly fetch any | |||||
| changes made to it to a local read-only copy. | |||||
| You can not observe builtin URIs because reading a repository from itself | |||||
| does not make sense. | |||||
| You can not add a URI in Observe mode if an existing builtin URI is in | |||||
| //Read/Write// mode, because this would mean the repository had two different | |||||
| authorities: the observed remote copy and the hosted local copy. Take the | |||||
| other URI out of //Read/Write// mode first. | |||||
| **Mirror**: Phabricator will push any changes made to this repository to the | |||||
| remote URI, keeping a read-only mirror hosted at that URI up to date. | |||||
| This works for both observed and hosted repositories. | |||||
| This option is not available for builtin URIs because it does not make sense | |||||
| to mirror a repository to itself. | |||||
| It is possible to mirror a repository to another repository that is also | |||||
| hosted by Phabricator by adding that other repository's URI, although this is | |||||
| silly and probably very rarely of any use. | |||||
| **None**: Phabricator will not fetch changes from or push changes to this URI. | |||||
| For builtin URIs, it will not let users fetch changes from or push changes to | |||||
| this URI. | |||||
| You can use this mode to turn off an Observe URI after an import, stop a Mirror | |||||
| URI from updating, or to add URIs that you're only using to customize which | |||||
| clone URIs are displayed to the user but don't want Phabricator to interact | |||||
| with directly. | |||||
| **Read Only**: Phabricator will serve the repository from this URI in read-only | |||||
| mode. Users will be able to fetch from it but will not be able to push to it. | |||||
| Because Phabricator must be able to serve the repository from URIs configured | |||||
| in this mode, this option is only available for builtin URIs. | |||||
| **Read/Write**: Phabricator will serve the repository from this URI in | |||||
| read/write mode. Users will be able to fetch from it and push to it. | |||||
| URIs can not be set into this mode if another URI is set to //Observe// mode, | |||||
| because that would mean the repository had two different authorities: the | |||||
| observed remote copy and the hosted local copy. Take the other URI out of | |||||
| //Observe// mode first. | |||||
| Because Phabricator must be able to serve the repository from URIs configured | |||||
| in this mode, this option is only available for builtin URIs. | |||||
| Reference: Display Types | |||||
| ======================== | |||||
| This section details the available **Display Type** options for URIs. | |||||
| **Default**: Phabricator will guess the correct option for the URI. It | |||||
| guesses based on the configured **I/O Type** and whether the URI is | |||||
| **builtin** or not. | |||||
| For //Observe//, //Mirror// and //None// URIs, the default is //Never//. | |||||
| For builtin URIs in //Read Only// or //Read/Write// mode, the most | |||||
| human-readable URI defaults to //Always// and the others default to //Never//. | |||||
| **Always**: This URI will be shown to users as a clone/checkout URI. You can | |||||
| add URIs in this mode to cutomize exactly what users are shown. | |||||
| **Never**: This URI will not be shown to users. You can hide less-preferred | |||||
| URIs to guide users to the URIs they should be using to interact with the | |||||
| repository. | |||||
| Next Steps | |||||
| ========== | |||||
| Continue by: | |||||
| - configuring Phabricator to host repositories with | |||||
| @{article:Diffusion User Guide: Repository Hosting}. | |||||
FWIW, a pitfall we ran into was that during the initial import, unless you too steps to avoid it, the initial import generates email. We ended up disabling autoclose and notify/push during the initial import to avoid this.
This may have been PEBKAC or a problem specific to us; I just thought I'd mention it in case it affects normal users and may be worth warning about here.