{"id":146,"date":"2026-10-12T13:21:49","date_gmt":"2026-10-12T13:21:49","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2009\/10\/06\/how-to-use-svn-tasks-with-ant\/"},"modified":"2026-10-12T13:21:49","modified_gmt":"2026-10-12T13:21:49","slug":"how-to-use-svn-tasks-with-ant","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/how-to-use-svn-tasks-with-ant\/","title":{"rendered":"Automating SVN Tagging, Branching, and Export with Apache Ant (SVN Ant)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2009-10-06; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your team still uses Subversion, SVN Ant tasks let you automate repetitive repository operations directly from your Ant build. This walkthrough is for build and release engineers who want predictable, scriptable <strong>tag<\/strong>, <strong>branch<\/strong>, and <strong>export<\/strong> actions with shared properties and reusable targets.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2009\/10\/svn-tasks-ant.png\" alt=\"SVN tasks with Ant\" width=\"600\" height=\"400\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2009\/10\/svn-tasks-ant.png 600w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2009\/10\/svn-tasks-ant-300x200.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">When this pattern is useful<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This approach is useful when you already have Ant-based CI\/CD jobs and want SVN operations to run as first-class build targets instead of ad-hoc shell scripts. The original post\u2019s environment used ANT 1.7.0, SVN Ant 1.1-rc3, and Subversion 1.4.0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dependencies and repository assumptions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The examples below assume a standard SVN layout per project: <code>trunk<\/code>, <code>tags<\/code>, and <code>branches<\/code>.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>SVN Ant: <a href=\"http:\/\/subclipse.tigris.org\/svnant.html\" target=\"_blank\" rel=\"noopener\">http:\/\/subclipse.tigris.org\/svnant.html<\/a><\/li><li>Apache Ant: <a href=\"http:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\">http:\/\/ant.apache.org\/<\/a><\/li><li>Original external article link: <a href=\"http:\/\/java.dzone.com\/articles\/how-use-svn-tasks-with-ant\" target=\"_blank\" rel=\"noopener\">http:\/\/java.dzone.com\/articles\/how-use-svn-tasks-with-ant<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Define shared SVN properties in build.properties<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Keep repository location, project base path, and naming inputs in one properties file so each target can reuse them.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-properties\"><span class=\"hljs-comment\"># SVN connection and structure<\/span>\nsvn.repository.url=http:<span class=\"hljs-comment\">\/\/xyz.com\/repos\/somereponame<\/span>\nsvn.project.base.path=someprojectname\nsvn.username=your_svn_username\nsvn.password=your_svn_password\n\n<span class=\"hljs-comment\"># Release\/tag input<\/span>\ntag.name=SOME_TAG_NAME_12222008\n\n<span class=\"hljs-comment\"># Branch input<\/span>\n<span class=\"hljs-keyword\">new<\/span>.branch.name=NEW_BRANCH_12222008<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Create reusable targets in svn-tasks.xml<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This structure loads SVN Ant, validates availability, and then exposes dedicated targets for tagging, branching, and export.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svn-tasks'<\/span> <span class=\"hljs-attr\">default<\/span>=<span class=\"hljs-string\">'tool-availability'<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">file<\/span>=<span class=\"hljs-string\">'build.properties'<\/span> \/&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svn.base.url'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'${svn.repository.url}\/${svn.project.base.path}'<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svnant.lib.dir'<\/span> <span class=\"hljs-attr\">location<\/span>=<span class=\"hljs-string\">'svn-ant-lib'<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svnant.javahl'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'false'<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svnant.svnkit'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'true'<\/span> \/&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">path<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">'svnant.classpath'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">fileset<\/span> <span class=\"hljs-attr\">dir<\/span>=<span class=\"hljs-string\">'${svnant.lib.dir}'<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">include<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'**\/*.jar'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">fileset<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">path<\/span>&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">typedef<\/span> <span class=\"hljs-attr\">resource<\/span>=<span class=\"hljs-string\">'org\/tigris\/subversion\/svnant\/svnantlib.xml'<\/span> <span class=\"hljs-attr\">classpathref<\/span>=<span class=\"hljs-string\">'svnant.classpath'<\/span> \/&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'tool-availability'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">available<\/span> <span class=\"hljs-attr\">resource<\/span>=<span class=\"hljs-string\">'org\/tigris\/subversion\/svnant\/svnantlib.xml'<\/span>\n                   <span class=\"hljs-attr\">classpathref<\/span>=<span class=\"hljs-string\">'svnant.classpath'<\/span>\n                   <span class=\"hljs-attr\">property<\/span>=<span class=\"hljs-string\">'available.svnant'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'SVN-ANT is available = ${available.svnant}'<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'does-svnant-exist'<\/span> <span class=\"hljs-attr\">depends<\/span>=<span class=\"hljs-string\">'tool-availability'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">fail<\/span> <span class=\"hljs-attr\">unless<\/span>=<span class=\"hljs-string\">'available.svnant'<\/span>&gt;<\/span>SVN-ANT is not available.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">fail<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svntag'<\/span> <span class=\"hljs-attr\">depends<\/span>=<span class=\"hljs-string\">'does-svnant-exist'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'src.url'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'${svn.base.url}\/${project.name}\/trunk\/'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'dest.url'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'${svn.base.url}\/${project.name}\/tags\/${tag.name}'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">svn<\/span> <span class=\"hljs-attr\">javahl<\/span>=<span class=\"hljs-string\">'${svnant.javahl}'<\/span> <span class=\"hljs-attr\">svnkit<\/span>=<span class=\"hljs-string\">'${svnant.svnkit}'<\/span> <span class=\"hljs-attr\">username<\/span>=<span class=\"hljs-string\">'${svn.username}'<\/span> <span class=\"hljs-attr\">password<\/span>=<span class=\"hljs-string\">'${svn.password}'<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">copy<\/span> <span class=\"hljs-attr\">srcUrl<\/span>=<span class=\"hljs-string\">'${src.url}'<\/span> <span class=\"hljs-attr\">destUrl<\/span>=<span class=\"hljs-string\">'${dest.url}'<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'Tagging ${project.name} as ${tag.name}'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">svn<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svnbranch'<\/span> <span class=\"hljs-attr\">depends<\/span>=<span class=\"hljs-string\">'does-svnant-exist'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'src.url'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'${svn.base.url}\/${project.name}\/trunk\/'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'dest.url'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'${svn.base.url}\/${project.name}\/branches\/${new.branch.name}'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">svn<\/span> <span class=\"hljs-attr\">javahl<\/span>=<span class=\"hljs-string\">'${svnant.javahl}'<\/span> <span class=\"hljs-attr\">svnkit<\/span>=<span class=\"hljs-string\">'${svnant.svnkit}'<\/span> <span class=\"hljs-attr\">username<\/span>=<span class=\"hljs-string\">'${svn.username}'<\/span> <span class=\"hljs-attr\">password<\/span>=<span class=\"hljs-string\">'${svn.password}'<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">copy<\/span> <span class=\"hljs-attr\">srcUrl<\/span>=<span class=\"hljs-string\">'${src.url}'<\/span> <span class=\"hljs-attr\">destUrl<\/span>=<span class=\"hljs-string\">'${dest.url}'<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'Branch ${project.name} to ${new.branch.name}'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">svn<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span>\n\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'svnexport'<\/span> <span class=\"hljs-attr\">depends<\/span>=<span class=\"hljs-string\">'does-svnant-exist'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'src.url'<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">'${svn.base.url}\/${project.name}\/tags\/${tag.name}'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">svn<\/span> <span class=\"hljs-attr\">javahl<\/span>=<span class=\"hljs-string\">'${svnant.javahl}'<\/span> <span class=\"hljs-attr\">svnkit<\/span>=<span class=\"hljs-string\">'${svnant.svnkit}'<\/span> <span class=\"hljs-attr\">username<\/span>=<span class=\"hljs-string\">'${svn.username}'<\/span> <span class=\"hljs-attr\">password<\/span>=<span class=\"hljs-string\">'${svn.password}'<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">export<\/span> <span class=\"hljs-attr\">srcUrl<\/span>=<span class=\"hljs-string\">'${src.url}'<\/span> <span class=\"hljs-attr\">destPath<\/span>=<span class=\"hljs-string\">'${dest.path}\/${project.name}'<\/span> \/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">svn<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">project<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Execution workflow<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Run Ant target] --> B[Load build.properties]\n    B --> C[Build SVN Ant classpath]\n    C --> D{SVN Ant available}\n    D -- no --> E[Fail build]\n    D -- yes --> F{Requested target}\n    F -- svntag --> G[Copy trunk to tags path]\n    F -- svnbranch --> H[Copy trunk to branches path]\n    F -- svnexport --> I[Export tag to local directory]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Tag vs branch vs export<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Target<\/th><th>SVN Ant operation<\/th><th>Typical source<\/th><th>Typical destination<\/th><th>Result<\/th><\/tr><\/thead><tbody><tr><td>svntag<\/td><td>copy<\/td><td>&#8230;\/project\/trunk\/<\/td><td>&#8230;\/project\/tags\/${tag.name}<\/td><td>Creates a repository tag path<\/td><\/tr><tr><td>svnbranch<\/td><td>copy<\/td><td>&#8230;\/project\/trunk\/<\/td><td>&#8230;\/project\/branches\/${new.branch.name}<\/td><td>Creates a new branch path<\/td><\/tr><tr><td>svnexport<\/td><td>export<\/td><td>&#8230;\/project\/tags\/${tag.name}<\/td><td>${dest.path}\/${project.name}<\/td><td>Exports files to local filesystem (no working copy metadata)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Run the targets from the command line<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use <code>-D<\/code> flags to pass or override values at runtime (for example, <code>project.name<\/code>, <code>tag.name<\/code>, and <code>dest.path<\/code>).<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Verify SVN Ant can be loaded<\/span>\nant -f svn-tasks.xml does-svnant-exist\n\n<span class=\"hljs-comment\"># Create a tag from trunk<\/span>\nant -f svn-tasks.xml svntag \\\n  -Dproject.name=my-app \\\n  -Dtag.name=REL_2026_10_12\n\n<span class=\"hljs-comment\"># Create a branch from trunk<\/span>\nant -f svn-tasks.xml svnbranch \\\n  -Dproject.name=my-app \\\n  -Dnew.branch.name=hotfix_2026_10\n\n<span class=\"hljs-comment\"># Export a tagged build to local disk<\/span>\nant -f svn-tasks.xml svnexport \\\n  -Dproject.name=my-app \\\n  -Dtag.name=REL_2026_10_12 \\\n  -Ddest.path=\/tmp\/releases<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Source links and attribution<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Original post permalink: <a href=\"https:\/\/www.devopsschool.com\/blog\/how-to-use-svn-tasks-with-ant\/\">https:\/\/www.devopsschool.com\/blog\/how-to-use-svn-tasks-with-ant\/<\/a><\/li><li>SVN Ant page (originally referenced): <a href=\"http:\/\/subclipse.tigris.org\/svnant.html\" target=\"_blank\" rel=\"noopener\">http:\/\/subclipse.tigris.org\/svnant.html<\/a><\/li><li>Apache Ant: <a href=\"http:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\">http:\/\/ant.apache.org\/<\/a><\/li><li>Referenced DZone article URL: <a href=\"http:\/\/java.dzone.com\/articles\/how-use-svn-tasks-with-ant\" target=\"_blank\" rel=\"noopener\">http:\/\/java.dzone.com\/articles\/how-use-svn-tasks-with-ant<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls and best practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Avoid storing real SVN credentials in VCS-tracked <code>build.properties<\/code>; inject them from CI secrets or local ignored files.<\/li><li>Fail fast with a tool-availability target so jobs do not partially execute.<\/li><li>Use immutable, descriptive tag names (for example release and date\/build number).<\/li><li>Validate that every project actually uses <code>trunk\/tags\/branches<\/code> before reusing these paths.<\/li><li>Log source and destination URLs for traceability during release automation.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This guide shows how to wire SVN Ant tasks into an Ant build so you can tag, branch, and export from Subversion consistently. You\u2019ll get a clean target structure, execution flow, and runnable commands.<\/p>\n","protected":false},"author":1,"featured_media":4080,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[12,23],"tags":[209,3266,3113,588,1023,3264,394,395,3267,3265,3271,3262,3263,3268,3270,3269,1947,1980],"class_list":["post-146","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apache-ant","category-svnsubversion","tag-ant","tag-ant-source-control-related-tasks","tag-how-to","tag-integration","tag-software-development","tag-source-control","tag-subversion","tag-svn","tag-svn-ant","tag-svn-ant-task","tag-svn-integration-with-ant","tag-svn-tasks","tag-svn-tasks-with-ant","tag-svn-tasks-with-ant-guide","tag-svn-tasks-with-ant-reference","tag-svn-tasks-with-ant-tutorial","tag-tasks","tag-use"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=146"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/146\/revisions"}],"predecessor-version":[{"id":78994,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/146\/revisions\/78994"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4080"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}