| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 1 | git-p4(1) | 
|  | 2 | ========= | 
|  | 3 |  | 
|  | 4 | NAME | 
|  | 5 | ---- | 
|  | 6 | git-p4 - Import from and submit to Perforce repositories | 
|  | 7 |  | 
|  | 8 |  | 
|  | 9 | SYNOPSIS | 
|  | 10 | -------- | 
|  | 11 | [verse] | 
|  | 12 | 'git p4 clone' [<sync options>] [<clone options>] <p4 depot path>... | 
|  | 13 | 'git p4 sync' [<sync options>] [<p4 depot path>...] | 
|  | 14 | 'git p4 rebase' | 
|  | 15 | 'git p4 submit' [<submit options>] [<master branch name>] | 
|  | 16 |  | 
|  | 17 |  | 
|  | 18 | DESCRIPTION | 
|  | 19 | ----------- | 
|  | 20 | This command provides a way to interact with p4 repositories | 
|  | 21 | using git. | 
|  | 22 |  | 
|  | 23 | Create a new git repository from an existing p4 repository using | 
|  | 24 | 'git p4 clone', giving it one or more p4 depot paths. Incorporate | 
|  | 25 | new commits from p4 changes with 'git p4 sync'. The 'sync' command | 
|  | 26 | is also used to include new branches from other p4 depot paths. | 
|  | 27 | Submit git changes back to p4 using 'git p4 submit'. The command | 
|  | 28 | 'git p4 rebase' does a sync plus rebases the current branch onto | 
|  | 29 | the updated p4 remote branch. | 
|  | 30 |  | 
|  | 31 |  | 
|  | 32 | EXAMPLE | 
|  | 33 | ------- | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 34 | * Clone a repository: | 
|  | 35 | + | 
|  | 36 | ------------ | 
|  | 37 | $ git p4 clone //depot/path/project | 
|  | 38 | ------------ | 
|  | 39 |  | 
|  | 40 | * Do some work in the newly created git repository: | 
|  | 41 | + | 
|  | 42 | ------------ | 
|  | 43 | $ cd project | 
|  | 44 | $ vi foo.h | 
|  | 45 | $ git commit -a -m "edited foo.h" | 
|  | 46 | ------------ | 
|  | 47 |  | 
|  | 48 | * Update the git repository with recent changes from p4, rebasing your | 
|  | 49 | work on top: | 
|  | 50 | + | 
|  | 51 | ------------ | 
|  | 52 | $ git p4 rebase | 
|  | 53 | ------------ | 
|  | 54 |  | 
|  | 55 | * Submit your commits back to p4: | 
|  | 56 | + | 
|  | 57 | ------------ | 
|  | 58 | $ git p4 submit | 
|  | 59 | ------------ | 
|  | 60 |  | 
|  | 61 |  | 
|  | 62 | COMMANDS | 
|  | 63 | -------- | 
|  | 64 |  | 
|  | 65 | Clone | 
|  | 66 | ~~~~~ | 
|  | 67 | Generally, 'git p4 clone' is used to create a new git directory | 
|  | 68 | from an existing p4 repository: | 
|  | 69 | ------------ | 
|  | 70 | $ git p4 clone //depot/path/project | 
|  | 71 | ------------ | 
|  | 72 | This: | 
|  | 73 |  | 
|  | 74 | 1. Creates an empty git repository in a subdirectory called 'project'. | 
|  | 75 | + | 
|  | 76 | 2. Imports the full contents of the head revision from the given p4 | 
|  | 77 | depot path into a single commit in the git branch 'refs/remotes/p4/master'. | 
|  | 78 | + | 
|  | 79 | 3. Creates a local branch, 'master' from this remote and checks it out. | 
|  | 80 |  | 
|  | 81 | To reproduce the entire p4 history in git, use the '@all' modifier on | 
|  | 82 | the depot path: | 
|  | 83 | ------------ | 
|  | 84 | $ git p4 clone //depot/path/project@all | 
|  | 85 | ------------ | 
|  | 86 |  | 
|  | 87 |  | 
|  | 88 | Sync | 
|  | 89 | ~~~~ | 
|  | 90 | As development continues in the p4 repository, those changes can | 
|  | 91 | be included in the git repository using: | 
|  | 92 | ------------ | 
|  | 93 | $ git p4 sync | 
|  | 94 | ------------ | 
|  | 95 | This command finds new changes in p4 and imports them as git commits. | 
|  | 96 |  | 
|  | 97 | P4 repositories can be added to an existing git repository using | 
|  | 98 | 'git p4 sync' too: | 
|  | 99 | ------------ | 
|  | 100 | $ mkdir repo-git | 
|  | 101 | $ cd repo-git | 
|  | 102 | $ git init | 
|  | 103 | $ git p4 sync //path/in/your/perforce/depot | 
|  | 104 | ------------ | 
|  | 105 | This imports the specified depot into | 
|  | 106 | 'refs/remotes/p4/master' in an existing git repository. The | 
|  | 107 | '--branch' option can be used to specify a different branch to | 
|  | 108 | be used for the p4 content. | 
|  | 109 |  | 
|  | 110 | If a git repository includes branches 'refs/remotes/origin/p4', these | 
|  | 111 | will be fetched and consulted first during a 'git p4 sync'. Since | 
|  | 112 | importing directly from p4 is considerably slower than pulling changes | 
|  | 113 | from a git remote, this can be useful in a multi-developer environment. | 
|  | 114 |  | 
|  | 115 |  | 
|  | 116 | Rebase | 
|  | 117 | ~~~~~~ | 
|  | 118 | A common working pattern is to fetch the latest changes from the p4 depot | 
|  | 119 | and merge them with local uncommitted changes. Often, the p4 repository | 
|  | 120 | is the ultimate location for all code, thus a rebase workflow makes | 
|  | 121 | sense. This command does 'git p4 sync' followed by 'git rebase' to move | 
|  | 122 | local commits on top of updated p4 changes. | 
|  | 123 | ------------ | 
|  | 124 | $ git p4 rebase | 
|  | 125 | ------------ | 
|  | 126 |  | 
|  | 127 |  | 
|  | 128 | Submit | 
|  | 129 | ~~~~~~ | 
|  | 130 | Submitting changes from a git repository back to the p4 repository | 
|  | 131 | requires a separate p4 client workspace. This should be specified | 
|  | 132 | using the 'P4CLIENT' environment variable or the git configuration | 
|  | 133 | variable 'git-p4.client'. The p4 client must exist, but the client root | 
|  | 134 | will be created and populated if it does not already exist. | 
|  | 135 |  | 
|  | 136 | To submit all changes that are in the current git branch but not in | 
|  | 137 | the 'p4/master' branch, use: | 
|  | 138 | ------------ | 
|  | 139 | $ git p4 submit | 
|  | 140 | ------------ | 
|  | 141 |  | 
|  | 142 | To specify a branch other than the current one, use: | 
|  | 143 | ------------ | 
|  | 144 | $ git p4 submit topicbranch | 
|  | 145 | ------------ | 
|  | 146 |  | 
|  | 147 | The upstream reference is generally 'refs/remotes/p4/master', but can | 
|  | 148 | be overridden using the '--origin=' command-line option. | 
|  | 149 |  | 
|  | 150 | The p4 changes will be created as the user invoking 'git p4 submit'. The | 
|  | 151 | '--preserve-user' option will cause ownership to be modified | 
|  | 152 | according to the author of the git commit. This option requires admin | 
|  | 153 | privileges in p4, which can be granted using 'p4 protect'. | 
|  | 154 |  | 
|  | 155 |  | 
|  | 156 | OPTIONS | 
|  | 157 | ------- | 
|  | 158 |  | 
|  | 159 | General options | 
|  | 160 | ~~~~~~~~~~~~~~~ | 
| Junio C Hamano | 37e389e | 2012-04-30 22:36:09 | [diff] [blame] | 161 | All commands except clone accept these options. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 162 |  | 
|  | 163 | --git-dir <dir>:: | 
|  | 164 | Set the 'GIT_DIR' environment variable. See linkgit:git[1]. | 
|  | 165 |  | 
| Junio C Hamano | 37e389e | 2012-04-30 22:36:09 | [diff] [blame] | 166 | --verbose:: | 
|  | 167 | Provide more progress information. | 
|  | 168 |  | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 169 | Sync options | 
|  | 170 | ~~~~~~~~~~~~ | 
|  | 171 | These options can be used in the initial 'clone' as well as in | 
|  | 172 | subsequent 'sync' operations. | 
|  | 173 |  | 
|  | 174 | --branch <branch>:: | 
|  | 175 | Import changes into given branch. If the branch starts with | 
|  | 176 | 'refs/', it will be used as is, otherwise the path 'refs/heads/' | 
|  | 177 | will be prepended. The default branch is 'master'. If used | 
|  | 178 | with an initial clone, no HEAD will be checked out. | 
|  | 179 | + | 
|  | 180 | This example imports a new remote "p4/proj2" into an existing | 
|  | 181 | git repository: | 
| Junio C Hamano | bcdb12e | 2012-05-10 18:45:15 | [diff] [blame] | 182 | + | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 183 | ---- | 
|  | 184 | $ git init | 
|  | 185 | $ git p4 sync --branch=refs/remotes/p4/proj2 //depot/proj2 | 
|  | 186 | ---- | 
|  | 187 |  | 
|  | 188 | --detect-branches:: | 
|  | 189 | Use the branch detection algorithm to find new paths in p4. It is | 
|  | 190 | documented below in "BRANCH DETECTION". | 
|  | 191 |  | 
|  | 192 | --changesfile <file>:: | 
|  | 193 | Import exactly the p4 change numbers listed in 'file', one per | 
|  | 194 | line. Normally, 'git p4' inspects the current p4 repository | 
|  | 195 | state and detects the changes it should import. | 
|  | 196 |  | 
|  | 197 | --silent:: | 
|  | 198 | Do not print any progress information. | 
|  | 199 |  | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 200 | --detect-labels:: | 
|  | 201 | Query p4 for labels associated with the depot paths, and add | 
| Junio C Hamano | 37e389e | 2012-04-30 22:36:09 | [diff] [blame] | 202 | them as tags in git. Limited usefulness as only imports labels | 
|  | 203 | associated with new changelists. Deprecated. | 
|  | 204 |  | 
|  | 205 | --import-labels:: | 
|  | 206 | Import labels from p4 into git. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 207 |  | 
|  | 208 | --import-local:: | 
|  | 209 | By default, p4 branches are stored in 'refs/remotes/p4/', | 
|  | 210 | where they will be treated as remote-tracking branches by | 
|  | 211 | linkgit:git-branch[1] and other commands. This option instead | 
|  | 212 | puts p4 branches in 'refs/heads/p4/'. Note that future | 
|  | 213 | sync operations must specify '--import-local' as well so that | 
|  | 214 | they can find the p4 branches in refs/heads. | 
|  | 215 |  | 
|  | 216 | --max-changes <n>:: | 
|  | 217 | Limit the number of imported changes to 'n'. Useful to | 
|  | 218 | limit the amount of history when using the '@all' p4 revision | 
|  | 219 | specifier. | 
|  | 220 |  | 
|  | 221 | --keep-path:: | 
|  | 222 | The mapping of file names from the p4 depot path to git, by | 
|  | 223 | default, involves removing the entire depot path. With this | 
|  | 224 | option, the full p4 depot path is retained in git. For example, | 
|  | 225 | path '//depot/main/foo/bar.c', when imported from | 
|  | 226 | '//depot/main/', becomes 'foo/bar.c'. With '--keep-path', the | 
|  | 227 | git path is instead 'depot/main/foo/bar.c'. | 
|  | 228 |  | 
|  | 229 | --use-client-spec:: | 
|  | 230 | Use a client spec to find the list of interesting files in p4. | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 231 | See the "CLIENT SPEC" section below. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 232 |  | 
|  | 233 | Clone options | 
|  | 234 | ~~~~~~~~~~~~~ | 
|  | 235 | These options can be used in an initial 'clone', along with the 'sync' | 
|  | 236 | options described above. | 
|  | 237 |  | 
|  | 238 | --destination <directory>:: | 
|  | 239 | Where to create the git repository. If not provided, the last | 
|  | 240 | component in the p4 depot path is used to create a new | 
|  | 241 | directory. | 
|  | 242 |  | 
|  | 243 | --bare:: | 
|  | 244 | Perform a bare clone. See linkgit:git-clone[1]. | 
|  | 245 |  | 
|  | 246 | -/ <path>:: | 
|  | 247 | Exclude selected depot paths when cloning. | 
|  | 248 |  | 
|  | 249 | Submit options | 
|  | 250 | ~~~~~~~~~~~~~~ | 
|  | 251 | These options can be used to modify 'git p4 submit' behavior. | 
|  | 252 |  | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 253 | --origin <commit>:: | 
|  | 254 | Upstream location from which commits are identified to submit to | 
|  | 255 | p4. By default, this is the most recent p4 commit reachable | 
|  | 256 | from 'HEAD'. | 
|  | 257 |  | 
| Junio C Hamano | 0248269 | 2012-07-16 05:28:39 | [diff] [blame] | 258 | -M:: | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 259 | Detect renames. See linkgit:git-diff[1]. Renames will be | 
|  | 260 | represented in p4 using explicit 'move' operations. There | 
|  | 261 | is no corresponding option to detect copies, but there are | 
|  | 262 | variables for both moves and copies. | 
|  | 263 |  | 
|  | 264 | --preserve-user:: | 
|  | 265 | Re-author p4 changes before submitting to p4. This option | 
|  | 266 | requires p4 admin privileges. | 
|  | 267 |  | 
| Junio C Hamano | 37e389e | 2012-04-30 22:36:09 | [diff] [blame] | 268 | --export-labels:: | 
|  | 269 | Export tags from git as p4 labels. Tags found in git are applied | 
|  | 270 | to the perforce working directory. | 
|  | 271 |  | 
|  | 272 | Rebase options | 
|  | 273 | ~~~~~~~~~~~~~~ | 
|  | 274 | These options can be used to modify 'git p4 rebase' behavior. | 
|  | 275 |  | 
|  | 276 | --import-labels:: | 
|  | 277 | Import p4 labels. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 278 |  | 
|  | 279 | DEPOT PATH SYNTAX | 
|  | 280 | ----------------- | 
|  | 281 | The p4 depot path argument to 'git p4 sync' and 'git p4 clone' can | 
|  | 282 | be one or more space-separated p4 depot paths, with an optional | 
|  | 283 | p4 revision specifier on the end: | 
|  | 284 |  | 
|  | 285 | "//depot/my/project":: | 
|  | 286 | Import one commit with all files in the '#head' change under that tree. | 
|  | 287 |  | 
|  | 288 | "//depot/my/project@all":: | 
|  | 289 | Import one commit for each change in the history of that depot path. | 
|  | 290 |  | 
|  | 291 | "//depot/my/project@1,6":: | 
|  | 292 | Import only changes 1 through 6. | 
|  | 293 |  | 
|  | 294 | "//depot/proj1@all //depot/proj2@all":: | 
|  | 295 | Import all changes from both named depot paths into a single | 
|  | 296 | repository. Only files below these directories are included. | 
|  | 297 | There is not a subdirectory in git for each "proj1" and "proj2". | 
|  | 298 | You must use the '--destination' option when specifying more | 
|  | 299 | than one depot path. The revision specifier must be specified | 
|  | 300 | identically on each depot path. If there are files in the | 
|  | 301 | depot paths with the same name, the path with the most recently | 
|  | 302 | updated version of the file is the one that appears in git. | 
|  | 303 |  | 
|  | 304 | See 'p4 help revisions' for the full syntax of p4 revision specifiers. | 
|  | 305 |  | 
|  | 306 |  | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 307 | CLIENT SPEC | 
|  | 308 | ----------- | 
|  | 309 | The p4 client specification is maintained with the 'p4 client' command | 
|  | 310 | and contains among other fields, a View that specifies how the depot | 
| Junio C Hamano | 8c6a7b0 | 2012-02-27 02:21:58 | [diff] [blame] | 311 | is mapped into the client repository. The 'clone' and 'sync' commands | 
|  | 312 | can consult the client spec when given the '--use-client-spec' option or | 
|  | 313 | when the useClientSpec variable is true. After 'git p4 clone', the | 
|  | 314 | useClientSpec variable is automatically set in the repository | 
|  | 315 | configuration file. This allows future 'git p4 submit' commands to | 
|  | 316 | work properly; the submit command looks only at the variable and does | 
|  | 317 | not have a command-line option. | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 318 |  | 
| Junio C Hamano | 4eda136 | 2012-04-23 20:55:49 | [diff] [blame] | 319 | The full syntax for a p4 view is documented in 'p4 help views'. 'Git p4' | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 320 | knows only a subset of the view syntax. It understands multi-line | 
|  | 321 | mappings, overlays with '+', exclusions with '-' and double-quotes | 
| Junio C Hamano | 4eda136 | 2012-04-23 20:55:49 | [diff] [blame] | 322 | around whitespace. Of the possible wildcards, 'git p4' only handles | 
|  | 323 | '...', and only when it is at the end of the path. 'Git p4' will complain | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 324 | if it encounters an unhandled wildcard. | 
|  | 325 |  | 
| Junio C Hamano | b5be052 | 2012-01-29 22:20:19 | [diff] [blame] | 326 | Bugs in the implementation of overlap mappings exist. If multiple depot | 
|  | 327 | paths map through overlays to the same location in the repository, | 
| Junio C Hamano | 4eda136 | 2012-04-23 20:55:49 | [diff] [blame] | 328 | 'git p4' can choose the wrong one. This is hard to solve without | 
|  | 329 | dedicating a client spec just for 'git p4'. | 
| Junio C Hamano | b5be052 | 2012-01-29 22:20:19 | [diff] [blame] | 330 |  | 
| Junio C Hamano | 4eda136 | 2012-04-23 20:55:49 | [diff] [blame] | 331 | The name of the client can be given to 'git p4' in multiple ways. The | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 332 | variable 'git-p4.client' takes precedence if it exists. Otherwise, | 
|  | 333 | normal p4 mechanisms of determining the client are used: environment | 
|  | 334 | variable P4CLIENT, a file referenced by P4CONFIG, or the local host name. | 
|  | 335 |  | 
|  | 336 |  | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 337 | BRANCH DETECTION | 
|  | 338 | ---------------- | 
|  | 339 | P4 does not have the same concept of a branch as git. Instead, | 
|  | 340 | p4 organizes its content as a directory tree, where by convention | 
|  | 341 | different logical branches are in different locations in the tree. | 
|  | 342 | The 'p4 branch' command is used to maintain mappings between | 
|  | 343 | different areas in the tree, and indicate related content. 'git p4' | 
|  | 344 | can use these mappings to determine branch relationships. | 
|  | 345 |  | 
|  | 346 | If you have a repository where all the branches of interest exist as | 
|  | 347 | subdirectories of a single depot path, you can use '--detect-branches' | 
|  | 348 | when cloning or syncing to have 'git p4' automatically find | 
|  | 349 | subdirectories in p4, and to generate these as branches in git. | 
|  | 350 |  | 
|  | 351 | For example, if the P4 repository structure is: | 
|  | 352 | ---- | 
|  | 353 | //depot/main/... | 
|  | 354 | //depot/branch1/... | 
|  | 355 | ---- | 
|  | 356 |  | 
|  | 357 | And "p4 branch -o branch1" shows a View line that looks like: | 
|  | 358 | ---- | 
|  | 359 | //depot/main/... //depot/branch1/... | 
|  | 360 | ---- | 
|  | 361 |  | 
|  | 362 | Then this 'git p4 clone' command: | 
|  | 363 | ---- | 
|  | 364 | git p4 clone --detect-branches //depot@all | 
|  | 365 | ---- | 
|  | 366 | produces a separate branch in 'refs/remotes/p4/' for //depot/main, | 
|  | 367 | called 'master', and one for //depot/branch1 called 'depot/branch1'. | 
|  | 368 |  | 
|  | 369 | However, it is not necessary to create branches in p4 to be able to use | 
|  | 370 | them like branches. Because it is difficult to infer branch | 
|  | 371 | relationships automatically, a git configuration setting | 
|  | 372 | 'git-p4.branchList' can be used to explicitly identify branch | 
|  | 373 | relationships. It is a list of "source:destination" pairs, like a | 
|  | 374 | simple p4 branch specification, where the "source" and "destination" are | 
|  | 375 | the path elements in the p4 repository. The example above relied on the | 
|  | 376 | presence of the p4 branch. Without p4 branches, the same result will | 
|  | 377 | occur with: | 
|  | 378 | ---- | 
|  | 379 | git config git-p4.branchList main:branch1 | 
|  | 380 | git p4 clone --detect-branches //depot@all | 
|  | 381 | ---- | 
|  | 382 |  | 
|  | 383 |  | 
|  | 384 | PERFORMANCE | 
|  | 385 | ----------- | 
|  | 386 | The fast-import mechanism used by 'git p4' creates one pack file for | 
|  | 387 | each invocation of 'git p4 sync'. Normally, git garbage compression | 
|  | 388 | (linkgit:git-gc[1]) automatically compresses these to fewer pack files, | 
|  | 389 | but explicit invocation of 'git repack -adf' may improve performance. | 
|  | 390 |  | 
|  | 391 |  | 
|  | 392 | CONFIGURATION VARIABLES | 
|  | 393 | ----------------------- | 
|  | 394 | The following config settings can be used to modify 'git p4' behavior. | 
|  | 395 | They all are in the 'git-p4' section. | 
|  | 396 |  | 
|  | 397 | General variables | 
|  | 398 | ~~~~~~~~~~~~~~~~~ | 
|  | 399 | git-p4.user:: | 
|  | 400 | User specified as an option to all p4 commands, with '-u <user>'. | 
|  | 401 | The environment variable 'P4USER' can be used instead. | 
|  | 402 |  | 
|  | 403 | git-p4.password:: | 
|  | 404 | Password specified as an option to all p4 commands, with | 
|  | 405 | '-P <password>'. | 
|  | 406 | The environment variable 'P4PASS' can be used instead. | 
|  | 407 |  | 
|  | 408 | git-p4.port:: | 
|  | 409 | Port specified as an option to all p4 commands, with | 
|  | 410 | '-p <port>'. | 
|  | 411 | The environment variable 'P4PORT' can be used instead. | 
|  | 412 |  | 
|  | 413 | git-p4.host:: | 
|  | 414 | Host specified as an option to all p4 commands, with | 
|  | 415 | '-h <host>'. | 
|  | 416 | The environment variable 'P4HOST' can be used instead. | 
|  | 417 |  | 
|  | 418 | git-p4.client:: | 
|  | 419 | Client specified as an option to all p4 commands, with | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 420 | '-c <client>', including the client spec. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 421 |  | 
|  | 422 | Clone and sync variables | 
|  | 423 | ~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 424 | git-p4.syncFromOrigin:: | 
|  | 425 | Because importing commits from other git repositories is much faster | 
|  | 426 | than importing them from p4, a mechanism exists to find p4 changes | 
|  | 427 | first in git remotes. If branches exist under 'refs/remote/origin/p4', | 
|  | 428 | those will be fetched and used when syncing from p4. This | 
|  | 429 | variable can be set to 'false' to disable this behavior. | 
|  | 430 |  | 
|  | 431 | git-p4.branchUser:: | 
|  | 432 | One phase in branch detection involves looking at p4 branches | 
|  | 433 | to find new ones to import. By default, all branches are | 
|  | 434 | inspected. This option limits the search to just those owned | 
|  | 435 | by the single user named in the variable. | 
|  | 436 |  | 
|  | 437 | git-p4.branchList:: | 
|  | 438 | List of branches to be imported when branch detection is | 
|  | 439 | enabled. Each entry should be a pair of branch names separated | 
|  | 440 | by a colon (:). This example declares that both branchA and | 
|  | 441 | branchB were created from main: | 
| Junio C Hamano | bcdb12e | 2012-05-10 18:45:15 | [diff] [blame] | 442 | + | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 443 | ------------- | 
|  | 444 | git config git-p4.branchList main:branchA | 
|  | 445 | git config --add git-p4.branchList main:branchB | 
|  | 446 | ------------- | 
|  | 447 |  | 
| Junio C Hamano | 37e389e | 2012-04-30 22:36:09 | [diff] [blame] | 448 | git-p4.ignoredP4Labels:: | 
|  | 449 | List of p4 labels to ignore. This is built automatically as | 
|  | 450 | unimportable labels are discovered. | 
|  | 451 |  | 
|  | 452 | git-p4.importLabels:: | 
|  | 453 | Import p4 labels into git, as per --import-labels. | 
|  | 454 |  | 
|  | 455 | git-p4.labelImportRegexp:: | 
|  | 456 | Only p4 labels matching this regular expression will be imported. The | 
|  | 457 | default value is '[a-zA-Z0-9_\-.]+$'. | 
|  | 458 |  | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 459 | git-p4.useClientSpec:: | 
| Junio C Hamano | 4fd2442 | 2012-01-06 21:52:43 | [diff] [blame] | 460 | Specify that the p4 client spec should be used to identify p4 | 
|  | 461 | depot paths of interest. This is equivalent to specifying the | 
|  | 462 | option '--use-client-spec'. See the "CLIENT SPEC" section above. | 
|  | 463 | This variable is a boolean, not the name of a p4 client. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 464 |  | 
|  | 465 | Submit variables | 
|  | 466 | ~~~~~~~~~~~~~~~~ | 
|  | 467 | git-p4.detectRenames:: | 
| Junio C Hamano | 0248269 | 2012-07-16 05:28:39 | [diff] [blame] | 468 | Detect renames. See linkgit:git-diff[1]. This can be true, | 
|  | 469 | false, or a score as expected by 'git diff -M'. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 470 |  | 
|  | 471 | git-p4.detectCopies:: | 
| Junio C Hamano | 0248269 | 2012-07-16 05:28:39 | [diff] [blame] | 472 | Detect copies. See linkgit:git-diff[1]. This can be true, | 
|  | 473 | false, or a score as expected by 'git diff -C'. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 474 |  | 
|  | 475 | git-p4.detectCopiesHarder:: | 
| Junio C Hamano | 0248269 | 2012-07-16 05:28:39 | [diff] [blame] | 476 | Detect copies harder. See linkgit:git-diff[1]. A boolean. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 477 |  | 
|  | 478 | git-p4.preserveUser:: | 
|  | 479 | On submit, re-author changes to reflect the git author, | 
|  | 480 | regardless of who invokes 'git p4 submit'. | 
|  | 481 |  | 
|  | 482 | git-p4.allowMissingP4Users:: | 
|  | 483 | When 'preserveUser' is true, 'git p4' normally dies if it | 
|  | 484 | cannot find an author in the p4 user map. This setting | 
|  | 485 | submits the change regardless. | 
|  | 486 |  | 
|  | 487 | git-p4.skipSubmitEdit:: | 
|  | 488 | The submit process invokes the editor before each p4 change | 
|  | 489 | is submitted. If this setting is true, though, the editing | 
|  | 490 | step is skipped. | 
|  | 491 |  | 
|  | 492 | git-p4.skipSubmitEditCheck:: | 
|  | 493 | After editing the p4 change message, 'git p4' makes sure that | 
|  | 494 | the description really was changed by looking at the file | 
|  | 495 | modification time. This option disables that test. | 
|  | 496 |  | 
|  | 497 | git-p4.allowSubmit:: | 
|  | 498 | By default, any branch can be used as the source for a 'git p4 | 
|  | 499 | submit' operation. This configuration variable, if set, permits only | 
|  | 500 | the named branches to be used as submit sources. Branch names | 
|  | 501 | must be the short names (no "refs/heads/"), and should be | 
|  | 502 | separated by commas (","), with no spaces. | 
|  | 503 |  | 
|  | 504 | git-p4.skipUserNameCheck:: | 
|  | 505 | If the user running 'git p4 submit' does not exist in the p4 | 
|  | 506 | user map, 'git p4' exits. This option can be used to force | 
|  | 507 | submission regardless. | 
|  | 508 |  | 
| Junio C Hamano | bcdb12e | 2012-05-10 18:45:15 | [diff] [blame] | 509 | git-p4.attemptRCSCleanup:: | 
| Junio C Hamano | 37e389e | 2012-04-30 22:36:09 | [diff] [blame] | 510 | If enabled, 'git p4 submit' will attempt to cleanup RCS keywords | 
|  | 511 | ($Header$, etc). These would otherwise cause merge conflicts and prevent | 
|  | 512 | the submit going ahead. This option should be considered experimental at | 
|  | 513 | present. | 
|  | 514 |  | 
|  | 515 | git-p4.exportLabels:: | 
|  | 516 | Export git tags to p4 labels, as per --export-labels. | 
|  | 517 |  | 
|  | 518 | git-p4.labelExportRegexp:: | 
|  | 519 | Only p4 labels matching this regular expression will be exported. The | 
|  | 520 | default value is '[a-zA-Z0-9_\-.]+$'. | 
| Junio C Hamano | db472bc | 2012-01-04 00:22:37 | [diff] [blame] | 521 |  | 
|  | 522 | IMPLEMENTATION DETAILS | 
|  | 523 | ---------------------- | 
|  | 524 | * Changesets from p4 are imported using git fast-import. | 
|  | 525 | * Cloning or syncing does not require a p4 client; file contents are | 
|  | 526 | collected using 'p4 print'. | 
|  | 527 | * Submitting requires a p4 client, which is not in the same location | 
|  | 528 | as the git repository. Patches are applied, one at a time, to | 
|  | 529 | this p4 client and submitted from there. | 
|  | 530 | * Each commit imported by 'git p4' has a line at the end of the log | 
|  | 531 | message indicating the p4 depot location and change number. This | 
|  | 532 | line is used by later 'git p4 sync' operations to know which p4 | 
|  | 533 | changes are new. |